我正在使用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联系客服