1

i'm using Jersey to build a REST service and as Json Processor i set Jackson in my application.

@javax.ws.rs.ApplicationPath("/")
public class MyApplication extends ResourceConfig {
   public MyApplication() {
       packages("controller");
       register(JacksonFeature.class);
}

I implement a ContextResolver for Jacksons ObjectMapper (as it's suggested in this post Configure Jersey/Jackson to NOT use @XmlElement field annotation for JSON field naming) which creates an ObjectMapper that doesn't fail on unknown properties during deserialization:

@Provider
public class MyJsonObjectMapperProvider implements ContextResolver<ObjectMapper> {

    @Override
    public ObjectMapper getContext(Class<?> type) 
    {
        System.out.println("mapper!!!");
        ObjectMapper result = new ObjectMapper();
        result.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return result;
    }
}

and then i register this class in my application inserting register(MyJsonObjectMapperProvider.class) in the class MyApplication shown above. I obtain what i want, in sense that if there are unknown properties in the json the object mapper doesn't fail. My problem is another; i have this class that i use to map a specified Json, in order to deserialize it and subsequently serialize it:

public class Version {

    private String status;
    private String updated;
    private String id;
    private List<Link> links;
    @XmlElement(name = "media-types")
    private List<MediaTypes> media_types;

    //constructor + getter and setter
}

The problem is about the element media_types and the use of the annotation @XmlElement. Before i insert the ContextResolver to personalize ObjectMapper all works fine, in fact after serialization i obtain a json in which the element/attribute media_types has as name media-types; on the contrary with ContextResolver this element doesn't change it's name and has media_types. I think that, during serialization, the annotation XmlElement doesn't work, but i'm not sure that this is the correct reason. Another attempt i try to do is to put @JsonProperty("media-types") annotation instead of @XmlElement annotation but with no result; in fact with this annotation i obtain also a Processing Exception. The last attempt (in addition to what has been suggested by the previous post) was that of insert these lines of code in the ContextResolver:

AnnotationIntrospector intr = new AnnotationIntrospector.Pair(new JaxbAnnotationIntrospector(),new JacksonAnnotationIntrospector());
            // usually we use same introspector(s) for both serialization and deserialization:
            result.getDeserializationConfig().withAnnotationIntrospector(intr);
            result.getSerializationConfig().withAnnotationIntrospector(intr);

in order to use both JaxbAnnotation and JacksonAnnotation but the name of the field in question remain media_types. I hope i was clear in explain my problem and thanks you in advance for your help!

Community
  • 1
  • 1
asdASD
  • 161
  • 3
  • 13
  • If you use field XMLElement annotations, add XmlAccessorType(XmlAccessType.FIELD) annotation to the class Version. Don't know if this will help, but with a bit luck ... – zyexal Sep 16 '14 at 18:39
  • Did any one found an answer for this ? I even asked the same (not this clearly) http://stackoverflow.com/questions/28878662/how-to-map-fileds-correctly-using-xmlelement-for-dozer – dinesh707 Mar 05 '15 at 13:37

0 Answers0