打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java – 与Jackson重复的JSON字段

我正在使用Jackson与Spring一起进行JSON(de)序列化.但是,在某些情况下,我遇到了两次字段的问题.

我有一个抽象类:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "mimeType")@JsonSubTypes({    @JsonSubTypes.Type(value = ImageBookmarkJsonModel.class, name = "image/jpeg"),    @JsonSubTypes.Type(value = EpubBookmarkJsonModel.class, name = "application/epub zip")})public abstract class AbstractBookmarkJsonModel extends AbstractJsonModel {    protected String mimeType;    // Removed other fields for brevity    public String getMimeType() {        return mimeType;    }    public void setMimeType(String mimeType) {        this.mimeType = mimeType;    }    @Override    public String toString() {        ObjectMapper mapper = new ObjectMapper();        try {            return mapper.writeValueAsString(this);        } catch (IOException e) {            throw new IllegalStateException("Cannot convert object of type "   this.getClass().toString()   " to JSON", e);        }    }}

一个具体的类扩展了抽象:

public class EpubBookmarkJsonModel extends AbstractBookmarkJsonModel {    private static final long serialVersionUID = 1L;    // Removed other fields for brevity    public EpubBookmarkJsonModel() {        this.mimeType = "application/epub zip";    }}

问题是当我序列化这个JSON时,我得到一个重复的mimeType字段:

{  "mimeType": "application/epub zip",  "mimeType": "application/epub zip",  "userId": 24,  "acid": "ACID-000000000029087",  "added": "2013-08-14T12:02:17Z",  "epubBookmarkId": 34,  "cfi": "epubcfi(/6/4!/2/68)",  "context": "CONTEXT"}

我已经尝试使用previous answers的建议来使用@JsonAutoDetect注释来指定只应该使用类上的字段以及在ObjectMapper上设置相同的字段,但是这不能解决问题.

注解:

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE,        setterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE,        isGetterVisibility = JsonAutoDetect.Visibility.NONE)

ObjectMapper:

    ObjectMapper mapper = new ObjectMapper();    mapper.getSerializationConfig().getDefaultVisibilityChecker()            .withFieldVisibility(JsonAutoDetect.Visibility.ANY)            .withGetterVisibility(JsonAutoDetect.Visibility.NONE)            .withSetterVisibility(JsonAutoDetect.Visibility.NONE)            .withCreatorVisibility(JsonAutoDetect.Visibility.NONE);

解决方法:

我通过在@JsonTypeInfo注释中使用JsonTypeInfo.As.EXISTING_PROPERTY解决了这个问题.

该项目是开源的,请在此处查看:ANS.java

来源:https://www.icode9.com/content-1-488401.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Jackson注解学习参考
Spring mvc3 jackson输出null为空字符串、单引号、字段和数字加引号问题
SPRING MVC3.2案例讲解
Flask结合ECharts实现在线可视化效果,超级详细!
Spring 3.x MVC 入门3 -- 使用内容协商来实现多视图
springmvc接收前台(可以是ajax)传来的数组list,map,set等集合,复杂对象集合等图文详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服