默认情况下,布尔值字段的JSON Post请求发送false
嗨,我正在使用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的值时,无论发送什么,它都是错误的。我在JSON请求中尝试了以下值
"isActive": 1"isActive": true
"isActive": "true"
"isActive": ""
"isActive": null
"isActive": false
以上所有内容在我的控制器中发送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;
}
}
回答:
请记住,默认情况下,杰克逊从getter或setter(第一个匹配的)中确定属性名称。
为了反序列化类型的对象POJOUserDetails
,Jackson将寻找三个属性
public void setFirstName(String firstName) {public void setLastName(String lastName) {
public void setActive(boolean isActive) {
在JSON中。这些基本上firstName
是lastName
,active
。
您得到以下JSON
{ "firstName": "Test", "lastName": "1", "isActive": 1 }
所以firstName
和lastName
被映射,但是您没有名为的属性isActive
。
Jackson依赖于Java Bean的命名约定及其访问器(获取器)和更改器(设置器)。对于像这样的领域
private boolean isActive;
适当的setter / getter名称是
public boolean getIsActive() { return isActive;
}
public void setIsActive(boolean isActive) {
this.isActive = isActive;
}
因此,您有两种可能的解决方案。如上所示更改您的获取/设置者或使用注释您的字段,@JsonProperty
以便Jackson使用字段名称来确定属性名称
@JsonPropertyprivate boolean isActive;
以上是 默认情况下,布尔值字段的JSON Post请求发送false 的全部内容, 来源链接: utcz.com/qa/430274.html