我正在使用Jersey爲服務器組件創建Web服務。不幸的是,我的JSON響應格式有問題,因爲數據總是格式化爲字符串。針對JSON序列化的JAXB批註POJO返回每個字段類型的字符串
我有不同的字段類型的簡單JAXB註釋POJO:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class JaxbPojo {
@XmlElement(name = "id_64")
private Long id;
@XmlElement(name = "desc")
private String description;
private Boolean active;
// getters and setters
..
}
和AA簡單的資源,返回傳入對象:
@Path("/jaxb_pojo")
public class JaxbPojoResource {
@POST
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public JaxbPojo processBidRequest(JaxbPojo pojo) {
return pojo;
}
}
當發送到所述資源的請求具有以下JSON數據,該對象在資源方法內正確填充。但字段類型返回的JSON數據總是被格式化爲字符串:
[email protected]:/tmp $ cat simple_jaxb_pojo
{"id_64":99,"desc":"simple JAXB POJO","active":true}
[email protected]:/tmp $ curl -X POST -H "Content-Type: application/json" --data-binary @simple_jaxb_pojo http://localhost/srvr/rest/jaxb_pojo
{"id_64":"99","desc":"simple JAXB POJO","active":"true"}
所有使用jar文件(JSR311-API-1.1.1.jar,球衣核-1.6.jar,新澤西州JSON-1.6 .jar,jersey-server-1.6.jar)直接包含在tomcat/lib路徑中。在JAX-RS庫通過的Maven的pom.xml與範圍「提供的」使用:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
我的web.xml文件看起來是這樣的:
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.rest.RestResourcesApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
..
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
我缺少的東西或者我可能到明確地配置傑克遜使用我的POJO類型。我對這個主題相當陌生,所以我發佈了關於此的所有信息。我希望有人能幫幫忙。
感謝您的回答。但是添加了這個,我得到了下面的異常:SEVERE:沒有找到用於Java類..JaxbPojo和Java類型類型..JaxbPojo以及MIME媒體類型application/json的消息正文閱讀器 18.10.2012 18:56:43 com .sun.jersey.spi.container。ContainerRequest getEntity SEVERE:與MIME媒體類型兼容的已註冊郵件正文閱讀器是: application/json - > com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider $ App com.sun.jersey.json .impl.provider.entity.JSONRootElementProvider $ App com.sun.jersey.json.impl.provider.entity.JSONListElementProvider $ – henne83
你確定'jersey-json'依賴項在你的類路徑中(並且它的範圍是正確的你的POM)?我嘗試從我的POM中刪除它,並得到了與您所做的相同的例外。 – condit
有趣的事情,它的工作原理,當我刪除提供 裏面的球衣依賴關係的pom.xml。設置範圍字段後,它將引發上述異常。 –
henne83