我正在使用带有 Jersey 2.0 的 Jackson json 提供程序。我有一个这样的网络资源:
@Path("/accesstokens")
public class AccessTokensService {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response generate(UserCredentials creds) {
System.out.println("In generate method..");
System.out.println(creds);
try {
// Authenticate .. generate token ..
return Response.ok(token, MediaType.APPLICATION_JSON).build();
}
catch (Exception e) {
e.printStackTrace();
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
}
}
}
UserCredentials Pojo 类如下:
public class UserCredentials {
private String username;
private String password;
private String ipAddress;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getIpAddress() {
return ipAddress;
}
public void setIpAddress(String ipAddress) {
this.ipAddress = ipAddress;
}
}
以下是 web.xml 中的相关片段:
<servlet>
<servlet-name>jersey-rest-service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.xxxxx.apps.ws.services;com.fasterxml.jackson.jaxrs.json;com.xxxxxx.apps.servlet;com.xxxxxx.apps.ws.filters</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.xxxxxx.apps.ws.filters.LoggingFilter</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
以下是 POST 实体数据的样子:
{"username":"xxxxx", "password":"xxxxxx", "ipAddress": "xxx.xxx.xxx.xxx"}
不幸的是,Jackson 提供者没有反序列化上述 JSON。将一个 null UserCredentials 对象注入到上述 Web 资源 POST 方法中。如果我使用自定义 MessageBodyReader,我的 Reader 的 readFrom 方法会被调用,我可以创建 UserCredentials pojo,然后在 POST 方法中可用。
几个问题:
1)我需要在Pojo上做任何特殊的注释让Jackson识别它吗?Pojo的包需要在web.xml中添加吗?
2) web.xml 中的这个属性是否相关:“com.sun.jersey.api.json.POJOMappingFeature”?
3) 我需要添加一个 ObjectMapper 吗?我认为它只需要针对自定义案例进行,但请告知。
3)还有其他问题吗?有没有办法在 Jackson 中调试代码?
谢谢。