Java EE7 REST server no longer returning List<String> as JSON Java EE7 REST server no longer returning List<String> as JSON json json

Java EE7 REST server no longer returning List<String> as JSON


It took me some hours but I finally solved this question myself.First fact is that the Glassfish4 JAX-RS implementation "Jersey" as switched its underlying JSON library from Jackson 1.x to Eclipselink MOXy. The latter seems not be able to convert Lists, Arrays and arbitrary POJOs to JSON out of the box. Therefore I tried to force JAX-RS to use Jackson 2.x and disable MOXy.

import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.Set;import javax.ws.rs.ApplicationPath;import javax.ws.rs.core.Application;// This is Jackson 2.x, Jackson 1.x used org.codehaus.jackson!import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;import org.slf4j.Logger;import org.slf4j.LoggerFactory;@ApplicationPath("rest")public class RestConfig extends Application {    private final static Logger log = LoggerFactory.getLogger(RestConfig.class);    @Override    public Set<Object> getSingletons() {        Set<Object> set = new HashSet<>();        log.info("Enabling custom Jackson JSON provider");        set.add(new JacksonJsonProvider() /* optionally add .configure(SerializationFeature.INDENT_OUTPUT, true) */);        return set;    }    @Override    public Map<String, Object> getProperties() {        Map<String, Object> map = new HashMap<>();        log.info("Disabling MOXy JSON provider");        map.put("jersey.config.disableMoxyJson.server", true);        return map;    }    @Override    public Set<Class<?>> getClasses() {        Set<Class<?>> resources = new java.util.HashSet<>();        // ... add your own REST enabled classes here ...        return resources;    }}

My pom.xml contains:

    <dependency>        <!-- REST (Jackson as JSON mapper) -->        <groupId>com.fasterxml.jackson.jaxrs</groupId>        <artifactId>jackson-jaxrs-json-provider</artifactId>        <version>2.2.3</version>    </dependency>    <dependency>        <!-- REST (Jackson LowerCaseWithUnderscoresStrategy etc.) -->        <groupId>com.fasterxml.jackson.core</groupId>        <artifactId>jackson-databind</artifactId>        <version>2.2.3</version>    </dependency>

Hope this helps someone!