I'm trying to write a simple Jersey server application. My code works fine only when I use XML. But when I request a result in JSON I get this error:
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type={application/json, q=1000}, type=class il.zukermandl.jersey.demo.model.User, genericType=class il.zukermandl.jersey.demo.model.User.
Here is my simple Java code.
@Path("/users")
public class UserService {
@GET
@Produces({APPLICATION_JSON, APPLICATION_XML})
public Response getUser() {
return ok(new User()).build();
}
}
I use JAXB annotations for my entity.
@XmlRootElement(name = "user")
@XmlType(propOrder = {"id", "name", "age"})
public class User {
private Long id;
private String name;
private Integer age;
// getters,setters and ctrs were omitted
}
My config class.
public class AppConfig extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> resources = new HashSet<Class<?>>();
resources.add(il.zukermandl.jersey.demo.service.UserService.class);
return resources;
}
}
And web.xml
descriptor.
<servlet>
<servlet-name>Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>il.zukermandl.jersey.demo</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Application</servlet-name>
<url-pattern>/rest_v1/*</url-pattern>
</servlet-mapping>
I think the main issue is in my pom.xml
file. So here it is
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies>
I use Tomcat 8.0.9
to run my code. Any ideas how to add JSON support to this app?
UPD
Here is the structure of my project.
WEB-INF
├── classes
│ ├── il
│ │ └── zukermandl
│ │ └── jersey
│ │ └── demo
│ │ ├── AppConfig.class
│ │ ├── model
│ │ │ └── User.class
│ │ └── service
│ │ └── UserService.class
│ └── misc.txt
├── lib
│ ├── aopalliance-repackaged-2.4.0-b10.jar
│ ├── hk2-api-2.4.0-b10.jar
│ ├── hk2-locator-2.4.0-b10.jar
│ ├── hk2-utils-2.4.0-b10.jar
│ ├── javassist-3.18.1-GA.jar
│ ├── javax.annotation-api-1.2.jar
│ ├── javax.inject-2.4.0-b10.jar
│ ├── javax.ws.rs-api-2.0.1.jar
│ ├── jersey-client-2.17.jar
│ ├── jersey-common-2.17.jar
│ ├── jersey-container-servlet-2.17.jar
│ ├── jersey-container-servlet-core-2.17.jar
│ ├── jersey-guava-2.17.jar
│ ├── jersey-media-jaxb-2.17.jar
│ ├── jersey-server-2.17.jar
│ ├── osgi-resource-locator-1.0.1.jar
│ └── validation-api-1.1.0.Final.jar
└── web.xml