我使用傑克遜json提供者與澤西島2.0。我有這樣的Web資源:傑克遜供應商不反序列化POST數據到Pojo(澤西島2.0)
@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"}
不幸的是,傑克遜提供商並未反序列化上述JSON。一個空的UserCredentials對象被注入到上面的Web資源的POST方法中。如果我使用自定義的MessageBodyReader,則會調用Reader的readFrom方法,並且可以創建UserCredentials pojo,然後在POST方法中使用它。
幾個問題:
1)我需要做的POJO的任何特殊標註爲傑克遜承認它? Pojo的包是否需要添加到web.xml中?
2)web.xml中的這個屬性是否相關:「com.sun.jersey.api.json.POJOMappingFeature」?
3)我需要添加一個ObjectMapper嗎?我認爲它只需要處理定製案例,但請告知。
3)其他陷阱?有沒有辦法在傑克遜調試代碼?
謝謝。
嗨,jackson-jaxrs-providers artifact提供的JacksonFeature?如果是的話是否有一個maven repo託管這個或者我應該從github上下載並構建一個?謝謝 – devlearn
這是在jersey-media-json-jackson。請參閱https://jersey.java.net/documentation/latest/user-guide.html#json.jackson –
即使沒有在應用程序中聲明JacksonFeature,它也可以使用該軟件包!非常感謝。 – devlearn