I'm using Jersey to produce JSON (with POJO mapping through Jackson) and Jetty (start from main method).
It works perfect for Jersey 1.x.:
ServletHolder sh = new ServletHolder(ServletContainer.class);
sh.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
"com.sun.jersey.api.core.PackagesResourceConfig");
sh.setInitParameter("com.sun.jersey.config.property.packages", "service");
sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
...
context.addServlet(sh, "/rest/*");
Server server = new Server(8080);
server.setHandler(context);
server.start();
Now I migrated my project to Jersey 2.0 and failed to enable POJO based JSON binding in it, I get the following:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class business.entity.ExampleEntity, genericType=class business.entity.ExampleEntity.
Obviously, com.sun.jersey.api.json.POJOMappingFeature
no longer valid as Jersey goes to org.glassfish
The documentation say the following:
In order to use Jackson as your JSON (JAXB/POJO) provider you need to register JacksonFeature and a ContextResolver for ObjectMapper (if needed) in your Configurable (client/server).
But I can't figure out how to do it correctly in my case.
I created a little project for this question:
branch master
- worked example for Jersey 1.17.1;
branch jersey-2.0-migration
- not working attempt to migrate to Jersey 2.0 - test failed;
branch jersey-2.0-migrate-client-only
- non working attempt to use Jersey client 2.0 with working Jersey server 1.17.1 - test failed.
Question is: how to enable POJO based JSON binding in Jersey 2.0