我正在使用Jackson将Java对象映射到JSON,该对象是一个非常简单的pojo类,如下所示:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;
@JsonAutoDetect
public class Area {
@JsonProperty("Id")
public int Id;
@JsonProperty("Name")
public String Name;
public Area() {
Name = "";
}
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
}
Run Code Online (Sandbox Code Playgroud)
映射代码如下所示:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
areaJSON = mapper.writeValueAsString(area);
Run Code Online (Sandbox Code Playgroud)
但此时areaJSON的值如下:
{"id":0,"name":"","Name":"","Id":0}
Run Code Online (Sandbox Code Playgroud)
请注意具有不同情况的多个值.
我究竟做错了什么?
Mat*_*all 12
杰克逊认为这些领域Id与Name获取者返回的领域不同,因为情况不同.使用标准的JavaBean命名约定,杰克逊推断对应的getter的字段命名为id和name,不Id和Name.
案件事件.
有两种简单的方法可以解决此问题:
@JsonAutoDetect完全从此类中删除注释.我很确定默认的注释值优先于ObjectMapper配置.交替:
根本不要捣乱ObjectMapper.更改@JsonAutoDetect的类
@JsonAutoDetect(
fieldVisibility = Visibility.ANY,
getterVisibility = Visibility.NONE,
setterVisibility = Visibility.NONE,
creatorVisibility = Visibility.NONE
)
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3972 次 |
| 最近记录: |