如何检查 JSON 字段为空和 null
How to check JSON field is empty and null
我正在尝试检查 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"
}
我知道另一种情况是愚蠢的,但我试过了,而且我什至不想为此空值提供 .1%
{
"name":"some",
"age":null
}
Jackson 管理要插入到反序列化 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;
}
}
然后你的 DefaultModel class 应该用你的自定义反序列化器注释:
@JsonDeserialize(using = DefaultModelDeserializer.class)
public class DefaultModel {
...
}
在您的 if 语句中:if (age.trim().isEmpty() || age==null)
需要先进行 null 检查,否则如果值为 null,则在调用 age.trim()
方法时您将得到 NullPointerException。
例如只需将其更改为:if (age==null || age.trim().isEmpty())
我正在尝试检查 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"
}
我知道另一种情况是愚蠢的,但我试过了,而且我什至不想为此空值提供 .1%
{
"name":"some",
"age":null
}
Jackson 管理要插入到反序列化 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;
}
}
然后你的 DefaultModel class 应该用你的自定义反序列化器注释:
@JsonDeserialize(using = DefaultModelDeserializer.class)
public class DefaultModel {
...
}
在您的 if 语句中:if (age.trim().isEmpty() || age==null)
需要先进行 null 检查,否则如果值为 null,则在调用 age.trim()
方法时您将得到 NullPointerException。
例如只需将其更改为:if (age==null || age.trim().isEmpty())