簡體   English   中英

從json字符串反序列化到對象時如何忽略null?

[英]how to ignore null when deserializing from json string to object?

我有一個如下定義的類:

// Ignore all the unknown properties in input JSON
@JsonIgnoreProperties(ignoreUnknown = true)

// Only include non null values in deserialized Java object.
@JsonInclude(value = Include.NON_NULL)
public class Person {


@JsonProperty("person_id")
private String personId;

@JsonProperty("school")
private String school;

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new   HashMap<String, List<AttributeBag>>();

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();



 public Map<String, List<AttributeBag>> getHobbies() {
    return hobbies;
}


   public Person(String person_id, String school) {
    super();
    this.person_id = person_id;
    this.school = school;

}

當我使用下面的JSON字符串從字符串到對象反序列化時,

 {
"person_id":"123",
"school":"stanford University"
}

從我反序列化的對象開始,業余愛好是創建但是空的,甚至沒有創建任務。 我期待像“任務”這樣的方式,如果JSON中沒有相應的字段,它不應該在對象中反序列化。

但奇怪的是:當我檢查object.getHobbies()!= null但是tasks部分為null。 如果它們不存在於JSON中,我希望它們在對象中都為null。

我有一個Person類的構造函數,但我沒有初始化兩個愛好和任務部分。

非常感謝

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new   HashMap<String, List<AttributeBag>>();

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();

從上面的代碼中可以清楚地知道,無論如何都要為業余愛好和任務創建對象,我無法理解為什么不創建任務(它應該被創建為空地圖)

並回答你的問題@JsonInclude(value = Include.NON_NULL)應該做的伎倆!

JSON反序列化器不會嘗試設置未出現在JSON結構中的字段,但這些行:

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies = new   HashMap<String, List<AttributeBag>>();

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks = new HashMap<String, Map<String, AttributeBag>>();

正在創建對象構造的值。

如果您希望它們為null,則不要在對象中分配它們,只需保留聲明:

@JsonProperty("hobbies")
private Map<String, List<AttributeBag>> hobbies;

@JsonProperty("tasks")
private Map<String, Map<String, AttributeBag>> tasks;

列表<object> null 在 Spring 啟動 Z594C103F2C6E04C3D8AB059F031E0C1 中反序列化 json 時<div id="text_translate"><p>我在 Spring 引導應用程序中遇到了 controller 問題。 當我在 controller(URI/調用)上進行調用時,object 列表始終是 null。</p><pre> { "code": "TEST", "name": "TEST NAME", "groupe": "A1", "list": [ {"type":"web", "link":"https://google.com/"}, {"type":"web", "link":"https://google2.com/"} ] }</pre><pre class="lang-java prettyprint-override"> @PostMapping(value="/call") public ResponseEntity&lt;Void&gt; ajouterEnvironnement(@RequestBody First first) { first.getCode() // value: "TEST" first.getList() // value: null }</pre><pre class="lang-java prettyprint-override"> public class First { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String code; private String name; private String groupe; @OneToMany(mappedBy = "first", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List&lt;Second&gt; list; }</pre><pre class="lang-java prettyprint-override"> public class Second { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String type; private String link; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "first_id", nullable = false) private First first; }</pre></div></object>

[英]List<object> null when deserializing json in Spring Boot controller

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Gson 反序列化對象時忽略 null 反序列化JSON對象時如何忽略特定屬性? 使用 Gson 或 Jackson 反序列化 JSON 時忽略空字段 使用jackson從webfront配對json字符串時如何忽略無效值並設置空值? 反序列化JSON時如何刪除或忽略Java類型提示? 列表<object> null 在 Spring 啟動 Z594C103F2C6E04C3D8AB059F031E0C1 中反序列化 json 時<div id="text_translate"><p>我在 Spring 引導應用程序中遇到了 controller 問題。 當我在 controller(URI/調用)上進行調用時,object 列表始終是 null。</p><pre> { "code": "TEST", "name": "TEST NAME", "groupe": "A1", "list": [ {"type":"web", "link":"https://google.com/"}, {"type":"web", "link":"https://google2.com/"} ] }</pre><pre class="lang-java prettyprint-override"> @PostMapping(value="/call") public ResponseEntity&lt;Void&gt; ajouterEnvironnement(@RequestBody First first) { first.getCode() // value: "TEST" first.getList() // value: null }</pre><pre class="lang-java prettyprint-override"> public class First { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String code; private String name; private String groupe; @OneToMany(mappedBy = "first", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List&lt;Second&gt; list; }</pre><pre class="lang-java prettyprint-override"> public class Second { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String type; private String link; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "first_id", nullable = false) private First first; }</pre></div></object> SimpleXML-反序列化時如何忽略類屬性 Jackson JSON 序列化:如何在嵌套對象的所有字段都為空時忽略它? 使用gson將Json字符串反序列化為嵌套對象會為Java中的最里面的字段提供空值 將JSON字符串轉換為Java對象時,如何忽略特定的JSON字段?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM