@ResponseBody
@RequestMapping(value="/getUser")
public JSONObject getContent(@ReqeustBody User user)
这是我的控制器代码。
@Data
public class User{
private String username = "administrator";
private String password = "123456";
private Integer age = 18;
}
这是我的User
类代码。
{
"username":"admin",
"password":"000",
"age":""
}
当我POST
上面的JSON
时,我得到的age
属性为null
。
我希望Jackson
用默认值反序列化""
中的空白字段(null
或JSON
)。
像这样:
{
"username":"admin",
"password":"000",
"age":18
}
我该怎么办?
答案 0 :(得分:1)
您可以定义一个自定义的getter属性,以在null
的情况下设置默认值。
public Integer getAge() {
if (age == null) {
return 18;
} else {
return this.age;
}
}
请注意,您无法更改setAge
方法,因为在这种情况下不会调用它,实际上,没有age
字段会通知Jackson调用该方法。
另一种选择是使用自定义构造函数,并使用值为JsonSetter
的Nulls.SKIP
注释
指示应该跳过输入空值并且不进行赋值的值; 这通常意味着该属性将具有其默认值。
如下:
public class User {
@JsonSetter(nulls = Nulls.SKIP)
private Integer age;
public User() {
this.age = 18;
}
...
}
@JsonSetter
存在于软件包com.fasterxml.jackson.annotation
中,可以使用以下方式将其作为依赖项导入maven中
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>YOURVERSION</version>
</dependency>
答案 1 :(得分:0)
一种方法是让您setAge
处理null
的情况,例如:
void setAge(Integer age){
if(age!=null) this.age = age;
}
或者您可以看一下@JsonSetter(nulls=Nulls.SKIP)
,我只是看了源代码,还没有尝试过:(
希望有帮助。