I've got jackson deserialization able to determine which type I'm passing to it, so in my controller method I now need to test which one I've received and act on it accordingly.
Is there a cleaner way of doing this?
My DTO classes:
Base entity maps to a BaseDTO xfer object as do Type1 and Type1-DTO and Type2. The *DTO types only expose the entity attributes I want exposed via REST.Code:@RooJavaBean @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class") public class BaseDTO {... @RooJavaBean @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class") public class Type1-DTO extends BaseDTO {... @RooJavaBean @JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class") public class Type2-DTO extends BaseDTO {...
The controller checks the xferObj type, instantiates the right entity type, then calls a converter, but it's calling the base class converter, not the subclass one.
Then in my controller:
So, question 1: Am I making this more complicated than it needs to be? IOW, what's the right way to handle polymorphic types coming in under one base type?Code:@RequestMapping(value = "/{id}/foo", method = RequestMethod.POST) @ResponseBody public BaseDTO createOffer( HttpServletRequest request, @Valid @RequestBody BaseDTO xferObject) { BaseObj base = null; if(xferObject instanceof Type1-DTO) { offer = new Type1-DTO(); } if(xferObject instanceof Type2-DTO) { offer = new Type2-DTO(); } xferObject.toEntity(base); <<-- here, it's calling Base.toEntity, not Type1.toEntity or Type2.toEntity.
Is there some clever trick for eliminating the manual type checking?
question 2: Why is the toEntity() not picking up the subclass method and is calling the base class method instead?
Thanks in advance.


Reply With Quote
