I have an attribute that may be one of 2 types and an abstract class for
common things.
I have another class that references this class as it's abstract type.
The payload I am de-serializing uses name of the attribute to discriminate
the type:
I..E. it may be
item : { stockProduct: {data..},lineNumber:2 }
or
item : { customProduct: {data..},lineNumber:2 }
I cannot add a type attribute to the payload:
Tried using a TypeResolver but could not get it access to the value name
I want to use a Mapper to deSerialize the data elements, so...
ObjectMapper mapper = new ObjectMapper();
public JacksonProductDeserializer() {
this(null);
}
public JacksonProductDeserializer(Class<?> vc) {
super(vc);
}
@Override
public ProductDto deserialize(JsonParser jp, DeserializationContext ctx) throws
IOException, JsonProcessingException {
String currentName = jp.getCurrentName();
mapper.readValue(jp, StockProductDto.class);
ProductDto dto;
if ("stockProduct".equals(currentName)) {
dto = mapper.readValue(jp, StockProductDto.class);
return dto;
}
Etc...
This works, but the parser apparently skips up when processing and tries to
assign lineNumber to the StockProduct when it should be assigned to the
Item.
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
Unrecognized field "lineNumber" (class mycorp.common.StockProductDto), not
marked as ignorable (2 known properties: "id", "code"])
at [Source: (String)"{
"quantity": "1",
"price": {
"value": 1.99
},
"stockProduct": {
"code": "2LDCOKE"
},
"lineNumber": "3"
}"; line: 9, column: 18] (through reference chain:
mycorp.events.common.OrderLineDto["stockProduct"]->
mycorp.events.common.StockProductDto["lineNumber"])
This seems like something that should be easy and I'm just missing
something, any help would be appreciated.
--
You received this message because you are subscribed to the Google Groups
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.