Java 如何检查JSON字段是否为空和null

Java 如何检查JSON字段是否为空和null,java,jackson,lombok,Java,Jackson,Lombok,我试图检查JSON字段是否为空或null,它适用于空字符串,不适用于null Lombok我只是用来覆盖ToString,但我使用的是Jackson库 import lombok.ToString; @ToString public class DefaultModel { private String name; private String age; public String getName() { return name; }

我试图检查JSON字段是否为空或null,它适用于空字符串,不适用于null

Lombok我只是用来覆盖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
}

管理要插入到反序列化pojo中的值的好方法是实现自定义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;
    }

}

在if语句中:
if(age.trim().isEmpty()| | age==null)
需要先进行null检查,否则如果值为null,则调用
age.trim()
方法时会出现NullPointerException


例如,只需将其更改为:
if(age==null | | age.trim().isEmpty())

如果不在body中传递属性,则它不起作用,但至少要感谢在我通过
“age”:null时工作。@Deadpool我以前不理解你的问题。我用一些我认为可以解决你问题的东西编辑了答案。我知道设置默认值可以解决问题,但我有10个这样的属性,不建议设置默认值有没有办法检查缺少的JSON字段?所以我们可以在setter方法中做一些事情来解析它或任何注释等等…@Deadpool是的。使用自定义Jackson反序列化程序。我对答案进行了编辑,以显示您需要执行的操作。在一种情况下,当我们不发送该字段时,它将不起作用body@Deadpool您一直在考虑JSON,但这是代码中一个不相关的bug。无论如何输入
age
,条件
age.trim().isEmpty()| | age==null
都是错误的。无条件地错了。先解决这些问题,不要思考(有时投掷是需要的动作,但这是另一种情况,需要以不同的方式编写)。打开警告,我的Eclipse会说“条件总是错误的”。
@JsonDeserialize(using = DefaultModelDeserializer.class)
public class DefaultModel {

    ...
}