I\'m building REST service on Jersey
and using Jackson
to produce JSON from java classes of my model. Model with absolutely simple values, I think
Looks like you are over complicating your JAX-RS resource class.
To use Jackson as a JSON provider for Jersey 2.x, you don't need to create an ObjectMapper instance like that. There's a better way to achieve it. Keep reading for more details.
To use Jackson 2.x as your JSON provider you need to add jersey-media-json-jackson module to your pom.xml
file:
org.glassfish.jersey.media
jersey-media-json-jackson
2.25.1
Then register the JacksonFeature in your Application / ResourceConfig subclass:
@ApplicationPath("/api")
public class MyApplication extends Application {
@Override
public Set> getClasses() {
Set> classes = new HashSet>();
classes.add(JacksonFeature.class);
return classes;
}
}
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(JacksonFeature.class);
}
}
If you don't have an Application / ResourceConfig subclass, you can register the JacksonFeature in your web.xml
deployment descriptor. The specific resource, provider and feature fully-qualified class names can be provided in a comma-separated value of jersey.config.server.provider.classnames initialization parameter.
jersey.config.server.provider.classnames
org.glassfish.jersey.jackson.JacksonFeature
The MessageBodyWriter provided by Jackson is JacksonJsonProvider. For more details on how to use Jackson as a JSON provider, have a look at this answer. If you need to customize the ObjectMapper, refer to this answer.
By using the approach described above, you resource class can be as simple as:
@Path("/users")
public class MyRestService {
@GET
@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8"})
public List findUsers() {
List users = new ArrayList<>();
users.add(new User("Nick", "admin", "32", 47));
return Response.ok(users).build();
}
When requesting such endpoint, it will give you the expected JSON as result.