How to make Jersey/Jackson serialize empty list; single element list as an array

前端 未结 4 1852
青春惊慌失措
青春惊慌失措 2021-01-18 13:14

Using Jersey and Jackson to create a REST interface, how do I get List fields to be serialized as a list when there are 0 or 1 elements in them. For example:



        
4条回答
  •  既然无缘
    2021-01-18 13:43

    I wrote a blog post ages ago about forcing Jersey to serialize single element arrays correctly, not sure if it's out-dated now (its from mid-2010!), but it might be of use.

    Note the blog comment from Brill Pappin on the blog demonstrating a different approach which means upgrading the Jettison library that you are using.

    In short you can write a custom JaxbContextResolver that looks a little like:

    @Provider
    @Component
    public class JAXBContextResolver implements ContextResolver {
    
        private JAXBContext context;
    
        public JAXBContextResolver() throws Exception {
            MappedBuilder builder = JSONConfiguration.mapped();
            builder.arrays("invite");
            builder.rootUnwrapping(true);
            this.context = new JSONJAXBContext(builder.build(), Payload.class);
        }
    
        public JAXBContext getContext(Class objectType) {
            return (Payload.class.equals(objectType)) ? context : null;
        }
    }
    

    For clarity, my payload class looked a little like

    @XmlRootElement(name = "response")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Payload {
    
        @XmlElement(name = "invite")
        List invites;
    
        ... etc.
    

    Regarding stopping Jackson serializing bean properties as null, see my previous answer here, about using annotations to change that behaviour.

提交回复
热议问题