2015-09-05 75 views
3

雖然我想通過使用jersey.i將java對象轉換爲json對象,但我有一個異常。Jersey 2.x不支持POJO到json?

Java代碼:-(POJO)

package org.jersey.media.type; 
    import javax.xml.bind.annotation.XmlRootElement; 
    @XmlRootElement 
    public class MyJaxbBean { 
    public String name; 
    public int age; 

    public MyJaxbBean() {} // JAXB needs this 

    public MyJaxbBean(String name, int age) { 
    this.name = name; 
    this.age = age; 
    } 
} 

資源: -

package org.jersey.media.type; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
@Path("/media") 
public class MediaResources { 
@GET 
@Produces("application/xml") 
public MyJaxbBean getMyBean() { 
    return new MyJaxbBean("Agamemnon", 32); 
} 
} 

例外: -

Sep 05, 2015 4:20:38 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWr iterInterceptor aroundWriteTo 
    SEVERE: MessageBodyWriter not found for media type=application/json,   type=class org.jersey.media.type.MyJaxbBean, genericType=class  org.jersey.media.type.MyJaxbBean. 

部署描述符: -

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
version="3.1"> 
<display-name>JerseyAuthentication</display-name> 
<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>org.jersey.media.type</param-value> 
    </init-param> 
    <!-- <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.jackson.JacksonFeature,org.glassfish.jersey.jackson.JacksonBinder</param-value> 
    </init-param> --> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Application</servlet-name> 
    <url-pattern>/service/*</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>login.html</welcome-file> 
</welcome-file-list> 
    </web-app> 

依賴關係: - enter image description here

我沒有使用maven

,懇請有人幫我解決這個

+0

你真的擁有傑克遜的依賴嗎?你可以顯示你所有的依賴關係 –

+0

我正在使用所有這些依賴關係。 –

回答

6

呀所以Jersey distribution不附帶任何JSON/POJO的支持。你需要自己找到它們並將它們添加到你的項目中。

如果你想使用JacksonFeature,那麼你需要抓住所有的罐子。你可以在提供者類的參數中指定你想要的任何類,但是如果你真的沒有它,什麼都不會發生。任何例外都沒有告訴你。

這些都是你需要

  • 新澤西媒體JSON - 傑克遜2.17
  • 球衣實體 - 過濾 - 2.17
  • 傑克遜JAXRS JSON的提供商 - 2.3.2所有罐子
  • 傑克遜 - 芯 - 2.3.2
  • 傑克遜 - 數據綁定-2.3.2
  • 傑克遜 - 註解-2.3.2
  • 傑克遜JAXRS鹼基2.3.2
  • 傑克遜模塊JAXB的註釋 - 2.3.2

注意,這些是用於澤西2.17的所有罐子。如果您使用的是更新版本,那麼您應該去here,然後選擇您正在使用的Jersey版本。你可以下載它。然後搜索具有相同版本的實體過濾jar。

所有其他傑克遜罐子是相同的版本,但你應該看到哪個版本的傑克遜jersey-media-json-jackson使用。當您點擊澤西島版本時,您應該能夠向下滾動查看它使用的是哪個傑克遜版本。然後,開始搜索該版本的所有上述Jackson罐子。例如,如果您選擇最新的澤西島2.21 version of the jersey-media-json-jackson,則可以向下滾動並查看它使用的是Jackson 2.5.4。所以你應該在2.5.4中搜索所有上面的Jackson罐子,而不是如上所示的2.3.2。


注意Maven的用戶,所有你需要的是

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>${jersey2.version}</version> 
</dependency> 

這種依賴性將在所有你看到上面列出的罐子拉。

+0

謝謝Mr.peeskillet,我是新來的球衣,希望深入學習,給予一些資源鏈接。 –

+0

最好的地方是[澤西文檔](https://jersey.java.net/documentation/latest/index.html)。但我會強烈建議在使用/學習Maven之前,先閱讀它。在[Examples Bundle](https://jersey.java.net/download.html)中有很多完整的示例,但它們都使用Maven。使用指南是一個很好的資源,因爲它附帶了完整的示例。但是,如果你不瞭解Maven,那麼你將很難跟進,或者只是讓事情發揮作用。只是爲了基本的東西,只是使用所有的罐子,你應該沒問題。 –

+0

但有了更多其他主題,您將需要更多的依賴關係,而這些依賴關係並不隨分佈而來。只要讓Maven處理檢索它們,文檔就會準確告訴你應該添加哪個Maven依賴項。 –