New*_*ies 30 java json spring-mvc pojo jackson
您好我正在使用FireFox RestClient发送JSON Post请求.
我的JSON请求如下:
{ "firstName": "Test", "lastName": "1", "isActive": 1 }
Run Code Online (Sandbox Code Playgroud)
我的POJO具有isActive字段如下
private boolean isActive;
Run Code Online (Sandbox Code Playgroud)
我的控制器定义如下
@RequestMapping(method = {RequestMethod.POST,
RequestMethod.PUT}, value = "/save")
public ResponseEntity<RestResponse> save(
@RequestBody POJOUserDetails userDetails, WebRequest request){
Run Code Online (Sandbox Code Playgroud)
在我的POJO中,当我检查isActive的值时,无论发送什么,它都是假的.我在我的JSON请求中尝试了以下值
"isActive": 1
"isActive": true
"isActive": "true"
"isActive": ""
"isActive": null
"isActive": false
Run Code Online (Sandbox Code Playgroud)
以上所有都在我的控制器中发送错误.请帮忙.谢谢
添加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;
}
}
Run Code Online (Sandbox Code Playgroud)
Sot*_*lis 79
请记住,默认情况下,Jackson会从getter或setter(匹配的第一个)中确定属性名称.
为了反序列化类型的对象POJOUserDetails
,杰克逊将寻找三个属性
public void setFirstName(String firstName) {
public void setLastName(String lastName) {
public void setActive(boolean isActive) {
Run Code Online (Sandbox Code Playgroud)
在JSON中.这些基本上firstName
是lastName
,active
.
您将获得以下JSON
{ "firstName": "Test", "lastName": "1", "isActive": 1 }
Run Code Online (Sandbox Code Playgroud)
所以firstName
并且lastName
已映射,但您没有名为的属性isActive
.
Jackson依赖于Java Bean命名约定及其访问器(getter)和mutators(setter).对于像这样的领域
private boolean isActive;
Run Code Online (Sandbox Code Playgroud)
适当的setter/getter名称是
public boolean getIsActive() {
return isActive;
}
public void setIsActive(boolean isActive) {
this.isActive = isActive;
}
Run Code Online (Sandbox Code Playgroud)
所以你有两个可能的解决方案.如上所示更改您的getter/setter或注释您的字段,@JsonProperty
以便Jackson使用字段名称来确定属性名称
@JsonProperty
private boolean isActive;
Run Code Online (Sandbox Code Playgroud)
Chi*_*wal 17
当您使用 lombok 等库来生成 getter 和 setter 时,如果字段类型为布尔值,请勿在字段名称中添加“is”。因为Jackson使用java的默认命名bean约定并在设置字段时添加“is”。所以添加“is”会使字段映射错误
归档时间: |
|
查看次数: |
56560 次 |
最近记录: |