के दौरान अनदेखा की गई है मैं जैक्सन 2.1.0 को कंक्रीट प्रकार की जानकारी के लिए 'भेदभावकर्ता' संपत्ति को देखने के लिए जैक्सन 2.1.0 को निर्देश देने के लिए @JsonTypeInfo का उपयोग कर रहा हूं। यह अच्छी तरह से काम करता है लेकिन deserialization के दौरान पीओजेओ में भेदभाव संपत्ति कोई सेट नहीं है।@JsonTypeInfo संपत्ति POJO deserialization
Jackon के जावाडोक (com.fasterxml.jackson.annotation.JsonTypeInfo.Id) के अनुसार, यह होना चाहिए:
/**
* Property names used when type inclusion method ({@link As#PROPERTY}) is used
* (or possibly when using type metadata of type {@link Id#CUSTOM}).
* If POJO itself has a property with same name, value of property
* will be set with type id metadata: if no such property exists, type id
* is only used for determining actual type.
*<p>
* Default property name used if this property is not explicitly defined
* (or is set to empty String) is based on
* type metadata type ({@link #use}) used.
*/
public String property() default "";
यहाँ एक failling परीक्षण
@Test
public void shouldDeserializeDiscriminator() throws IOException {
ObjectMapper mapper = new ObjectMapper();
Dog dog = mapper.reader(Dog.class).readValue("{ \"name\":\"hunter\", \"discriminator\":\"B\"}");
assertThat(dog).isInstanceOf(Beagle.class);
assertThat(dog.name).isEqualTo("hunter");
assertThat(dog.discriminator).isEqualTo("B"); //FAILS
}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "discriminator")
@JsonSubTypes({
@JsonSubTypes.Type(value = Beagle.class, name = "B"),
@JsonSubTypes.Type(value = Loulou.class, name = "L")
})
private static abstract class Dog {
@JsonProperty("name")
String name;
@JsonProperty("discriminator")
String discriminator;
}
private static class Beagle extends Dog {
}
private static class Loulou extends Dog {
}
कोई भी विचार है?
जैक्सन उपयोगकर्ता मेलिंग सूची से कॉपी/पेस्ट करें, लेकिन यह ठीक है। –
हां; ज्यादातर पाठकों के लाभ के लिए जो सूची में नहीं हैं। – StaxMan
क्या जैक्सन 1.9 में ऐसा करने का कोई तरीका है? – bananasplit