您好,我正在使用FireFox RestClient发送JSON Post请求。
我的JSON请求如下:
{ "firstName": "Test", "lastName": "1", "isActive": 1 }
我的POJO具有如下isActive字段
private boolean isActive;
我的控制器定义如下
@RequestMapping(method = {RequestMethod.POST,
RequestMethod.PUT}, value = "/save")
public ResponseEntity<RestResponse> save(
@RequestBody POJOUserDetails userDetails, WebRequest request){
在我的POJO中,当我检查isActive的值时,无论我发送什么,它都是false。
"isActive": 1
"isActive": true
"isActive": "true"
"isActive": ""
"isActive": null
"isActive": false
以上都在我的控制器中发送错误。请帮助。谢谢
添加POJO详细信息
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include=Inclusion.NON_EMPTY)
public class POJOUserDetails {
private String firstName;
private String lastName;
private boolean isActive;
public boolean isActive() {
return isActive;
}
public void setActive(boolean isActive) {
this.isActive = isActive;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
4条答案
按热度按时间hgc7kmma1#
记住,默认情况下,Jackson从getter或setter(第一个匹配的)确定属性名。
要反序列化
POJOUserDetails
类型的对象,Jackson将查找三个属性基本上就是
firstName
,lastName
,active
。您将获得以下JSON
所以
firstName
和lastName
是Map的,但是没有名为isActive
的属性。Jackson依赖于JavaBean的访问器(getter)和修改器(setter)命名约定。
相应的setter/getter名称为
因此,您有两种可能的解决方案:如上所示更改getter/setter,或者使用
@JsonProperty
注解字段,以便Jackson使用字段名来确定属性名zengzsys2#
当你使用像lombok这样的库来生成getter和setter的时候,如果字段类型是boolean的话,不要在字段名后面加上'is',因为Jackson使用java默认的命名bean约定,在设置字段的时候会加上'is',所以加上'is'会导致字段Map错误
wi3ka0sx3#
另一方面,我们可以使用
Boolean
Package 器来处理它,这样IDE通过向整个布尔字段的名称添加前缀get/set
来生成getter/setter。qyswt5oh4#
应该使用布尔值而不是布尔值。