色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

jackson轉json報空

錢浩然1年前9瀏覽0評論

在使用Java的Jackson庫將對象轉換成JSON數據時,有可能會遇到報“空指針異常”的情況。這種情況一般是由于對象中的某個屬性為null導致的。下面是一個例子:

User user = new User();
user.setUsername("Tom");
user.setAge(null);
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);

上面的代碼中,User對象的age屬性被設為null,當使用Jackson庫將其轉換成JSON數據時,程序報了一個空指針異常。

解決這個問題的方法有兩種:

第一種方法是使用@JsonInclude注解。這個注解可以控制序列化過程中哪些屬性需要被包含進去。比如,在User類的定義中,加入如下注解:

{@literal @}JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private String username;
{@literal @}JsonProperty("age")
private Integer age;
// 省略getter和setter方法
}

在@JsonProperty注解中給age屬性起了個別名"age"。這個注解也可以用來避免屬性名和關鍵字重復。@JsonInclude注解中的參數表明,只有當age不為null時,才對其進行序列化。

第二種方法是使用SimpleModule。SimpleModule是Jackson庫提供的一個類,它可以為Java對象注冊序列化和反序列化器。比如,在User類的定義中,加入如下代碼:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Integer.class, new JsonSerializer<Integer>() {
{@literal @}Override
public void serialize(Integer value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value == null) {
gen.writeNull();
} else {
gen.writeNumber(value);
}
}
});
mapper.registerModule(module);
String json = mapper.writeValueAsString(user);
System.out.println(json);

上面的代碼中,我們為Integer類型注冊了一個序列化器。如果需要序列化的值是null,那么我們就手動把null值寫入輸出流。這個方法雖然比第一種方法稍微麻煩一點,但是它可以控制序列化的方式,實現更細粒度的控制。