저는 Spring과 함께 JSON (de) 직렬화에 Jackson을 사용하고 있습니다. 그러나 어떤 경우에는 필드가 두 번 나타나는 문제가 있습니다.Jackson과 중복 된 JSON 필드
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
필드를 얻을 수 있다는 것입니다 :
@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);
}
}
}
그리고 구체적인 클래스 :
나는 추상 클래스가{
"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"
}
나는 previousanswers@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.Id.NAME를 제거하는 경우, =이 포함
프로젝트입니다 오픈 소스, 여기를 체크 아웃 JSONTypeInfo.As.PROPERTY, property = "mimeType") 'AbstractBookmarkJsonModel' 그러면 json에 하나의'mimeType' 만있을 것입니다. – Katona