如何检查JSON字段为空和空

时间:2018-07-17 20:47:06

标签: java jackson lombok

我正在尝试检查JSON字段为空还是为null,它适用于空字符串,而不适用于null

龙目岛我只是用来覆盖ToString,但是我正在使用Jackson库

import lombok.ToString;

@ToString
public class DefaultModel {

    private String name;
    private String age;  

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        if (age.trim().isEmpty()||age==null) {
            this.age="101";
        } else {
            this.age=age;
        }
    }
}

这是控制者:

@RequestMapping(value="/default", method=RequestMethod.POST)
public DefaultModel m1(@RequestBody() DefaultModel model) {
    System.out.println(model);
    return model;
}

它适用于空字符串,但当我没有在正文中传递JSON字段时不起作用

失败案例:

{
    "name":"some"
}

我知道另一种情况是愚蠢的,但是我尝试过,而且我甚至都不愿意为这个空值提供0.1%

{
    "name":"some",
    "age":null
}

2 个答案:

答案 0 :(得分:1)

在if语句中:for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { // No ; here! TwoDim[i][j] = temp; temp += 10; } } 首先要进行空检查,否则,如果值为null,则在调用if (age.trim().isEmpty() || age==null)方法时会出现NullPointerException。

例如只需将其更改为:age.trim()

答案 1 :(得分:0)

管理插入反序列化pojo中的值的一种不错的Jackson方法是实现自定义的Jackson反序列化器。在您的情况下,它将如下所示:

class DefaultModelDeserializer extends JsonDeserializer<DefaultModel> {

    @Override
    public DefaultModel deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        DefaultModel responseModel = jp.readValueAs(DefaultModel.class);

        DefaultModel finalModel = new DefaultModel();
        finalModel.setName(responseModel.name);
        finalModel.setAge(responseModel.age == null || age.trim().isEmpty() ? "101" : responseModel.age);

        return finalModel;
    }

}

然后应使用自定义反序列化器对DefaultModel类进行注释:

@JsonDeserialize(using = DefaultModelDeserializer.class)
public class DefaultModel {

    ...
}