के साथ जेएसओएन फील्ड डुप्लिकेट मैं वसंत के साथ जेएसओएन (डी) क्रमबद्धता के लिए जैक्सन का उपयोग कर रहा हूं। हालांकि मुझे कुछ मामलों में एक क्षेत्र में दो बार होने का मुद्दा है।जैक्सन
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"
}
मैंनेकी सिफारिश का उपयोग करने का प्रयास किया है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.Id.NAME निकालने के लिए, = शामिल JsonTypeInfo.As.PROPERTY, property = "mimeType") 'AbstractBookmarkJsonModel' से आपके पास आपके जेसन – Katona