Java 如何检查JSON字段是否为空和null
我试图检查JSON字段是否为空或null,它适用于空字符串,不适用于null Lombok我只是用来覆盖ToString,但我使用的是Jackson库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; }
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 {
...
}