我正在尝试检查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
}
答案 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 {
...
}