我尝试反序列化包含空属性并具有JsonMappingException的对象。
我所做的:
String actual = "{\"@class\" : \"PersonResponse\"," +
" \"id\" : \"PersonResponse\"," +
" \"result\" : \"Ok\"," +
" \"message\" : \"Send new person object to the client\"," +
" \"person\" : {" +
" \"id\" : 51," +
" \"firstName\" : null}}";
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(new StringReader(json), PersonResponse.class); //EXCEPTION!但是:如果要扔掉"firstName = null"属性--一切都很好!我的意思是传递下一个字符串:
String test = "{\"@class\" : \"PersonResponse\"," +
" \"id\" : \"PersonResponse\"," +
" \"result\" : \"Ok\"," +
" \"message\" : \"Send new person object to the client\"," +
" \"person\" : {" +
" \"id\" : 51}}";
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(new StringReader(json), PersonResponse.class); //ALL WORKS FINE!问题:在序列化过程中如何避免此异常或保证Jackson忽略空值?
抛出:
消息:
com.fasterxml.jackson.databind.MessageJsonException:
com.fasterxml.jackson.databind.JsonMappingException:
N/A (through reference chain: person.Create["person"]->Person["firstName"])事业:
com.fasterxml.jackson.databind.MessageJsonException:
com.fasterxml.jackson.databind.JsonMappingException:
N/A (through reference chain: prson.Create["person"]->Person["firstName"])原因: java.lang.NullPointerException
发布于 2013-08-07 07:03:08
如果不想序列化null值,可以使用以下设置(序列化期间):
objectMapper.setSerializationInclusion(Include.NON_NULL);希望这能解决你的问题。
但是反序列化过程中获得的NullPointerException在我看来是可疑的(理想情况下,杰克逊应该能够处理序列化输出中的null值)。你能把对应于PersonResponse类的代码寄出去吗?
发布于 2015-06-04 13:01:40
有时,当不小心将基元类型用作非原始字段的getter的返回类型时,会出现此问题:
public class Item
{
private Float value;
public float getValue()
{
return value;
}
public void setValue(Float value)
{
this.value = value;
}
}请注意getValue()-method的"float“而不是”-method“,这可能导致一个空指针异常,即使您已经添加了
objectMapper.setSerializationInclusion(Include.NON_NULL);发布于 2018-09-06 08:26:18
我也面临着同样的问题。
我只是在模型类中包含了一个默认构造函数,以及带有参数的其他构造函数。
啊,真灵。
package objmodel;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
public class CarModel {
private String company;
private String model;
private String color;
private String power;
public CarModel() {
}
public CarModel(String company, String model, String color, String power) {
this.company = company;
this.model = model;
this.color = color;
this.power = power;
}
@JsonDeserialize
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
@JsonDeserialize
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
@JsonDeserialize
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@JsonDeserialize
public String getPower() {
return power;
}
public void setPower(String power) {
this.power = power;
}
}https://stackoverflow.com/questions/18096589
复制相似问题