首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON: JsonMappingException,同时尝试用空值反序列化对象

JSON: JsonMappingException,同时尝试用空值反序列化对象
EN

Stack Overflow用户
提问于 2013-08-07 06:55:44
回答 4查看 95.2K关注 0票数 27

我尝试反序列化包含空属性并具有JsonMappingException的对象。

我所做的:

代码语言:javascript
复制
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"属性--一切都很好!我的意思是传递下一个字符串:

代码语言:javascript
复制
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忽略空值?

抛出:

消息:

代码语言:javascript
复制
com.fasterxml.jackson.databind.MessageJsonException:
 com.fasterxml.jackson.databind.JsonMappingException:
  N/A (through reference chain: person.Create["person"]->Person["firstName"])

事业:

代码语言:javascript
复制
com.fasterxml.jackson.databind.MessageJsonException:
 com.fasterxml.jackson.databind.JsonMappingException:
  N/A (through reference chain: prson.Create["person"]->Person["firstName"])

原因: java.lang.NullPointerException

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-07 07:03:08

如果不想序列化null值,可以使用以下设置(序列化期间):

代码语言:javascript
复制
objectMapper.setSerializationInclusion(Include.NON_NULL);

希望这能解决你的问题。

但是反序列化过程中获得的NullPointerException在我看来是可疑的(理想情况下,杰克逊应该能够处理序列化输出中的null值)。你能把对应于PersonResponse类的代码寄出去吗?

票数 21
EN

Stack Overflow用户

发布于 2015-06-04 13:01:40

有时,当不小心将基元类型用作非原始字段的getter的返回类型时,会出现此问题:

代码语言:javascript
复制
public class Item
{
    private Float value;

    public float getValue()
    {
        return value;
    }

    public void setValue(Float value)
    {
        this.value = value;
    }   
}

请注意getValue()-method的"float“而不是”-method“,这可能导致一个空指针异常,即使您已经添加了

代码语言:javascript
复制
objectMapper.setSerializationInclusion(Include.NON_NULL);
票数 56
EN

Stack Overflow用户

发布于 2018-09-06 08:26:18

我也面临着同样的问题。

我只是在模型类中包含了一个默认构造函数,以及带有参数的其他构造函数。

啊,真灵。

代码语言:javascript
复制
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;
}
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18096589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档