默认情况下,布尔值字段的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中。这些基本上firstNamelastNameactive

您得到以下JSON

{ "firstName": "Test", "lastName": "1", "isActive": 1 }

所以firstNamelastName被映射,但是您没有名为的属性isActive

Jackson依赖于Java Bean的命名约定及其访问器(获取器)和更改器(设置器)。对于像这样的领域

private boolean isActive;

适当的setter / getter名称是

public boolean getIsActive() {

return isActive;

}

public void setIsActive(boolean isActive) {

this.isActive = isActive;

}

因此,您有两种可能的解决方案。如上所示更改您的获取/设置者或使用注释您的字段,@JsonProperty以便Jackson使用字段名称来确定属性名称

@JsonProperty

private boolean isActive;

以上是 默认情况下,布尔值字段的JSON Post请求发送false 的全部内容, 来源链接: utcz.com/qa/430274.html

回到顶部