2014-11-04 40 views
0

我想要獲得非常簡單的POJO映射在新應用程序中工作。我正在關注幾個在線示例,但沒有任何工作。我總是爲什麼Jersey中的POJO JSON映射功能(MOXy)不能用於這個簡單的例子?

Severe: MessageBodyWriter not found for media type=application/json... 

從GlassFish的(4.0)

我的應用程序的啓動是右出澤西快速入門指南:

@ApplicationPath("/") 
public class App extends ResourceConfig { 
    public App() {   
     final MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig(); 
     Map<String, String> namespacePrefixMapper = new HashMap<String, String>(1); 
     namespacePrefixMapper.put("http://www.w3.org/2001/XMLSchema-instance", "xsi"); 
     moxyJsonConfig.setNamespacePrefixMapper(namespacePrefixMapper).setNamespaceSeparator(':'); 
     register(moxyJsonConfig); 
} 

}

和資源類也是正確的出的指南:

@Path("/") 
    public class PojoTestService { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
     return new Pojo(); 
    } 
} 

POJO很好,只是一個POJO!我一直有和沒有@XmlRootElement試了一下,因爲我發現,如果應包括或不矛盾的信息......

我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 

<groupId>com.mycom</groupId> 
<artifactId>artifact</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>artifact</name> 

<build> 
    <finalName>artifact</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.5.1</version> 
      <inherited>true</inherited> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.5</version> 
      <configuration> 
       <packagingExcludes>WEB-INF/web.xml</packagingExcludes> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey</groupId> 
      <artifactId>jersey-bom</artifactId> 
      <version>${jersey.version}</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
    </dependency> 
</dependencies> 
<properties> 
    <jersey.version>2.13</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

的web.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This web.xml file is not required when using Servlet 3.0 container, 
    see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
     <servlet-name>Jersey Web 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>com.mycom.server.package</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/webapi/*</url-pattern> 
</servlet-mapping> 

什麼沒有忘記進行配置?

+0

有沒有錯誤在啓動日誌中,其他映射工作得很好。正在查找和調用應用程序類,根據調試程序運行找到並調用資源類... – BadZen 2014-11-04 00:20:24

+0

您的POJO的外觀如何? – 2014-11-04 16:07:25

回答

0

看起來您正在使用Jersey 1.x的配置密鑰,以「com.sun.jersey ...」開頭。在新澤西州的2.x版已經改變,你可以在這個關鍵或許看到:

jersey.config.server.provider.packages 

我有它運行在您的web服務類的頂部封裝創建一個空的應用程序類:

package path.to.your.ws; 

import javax.ws.rs.core.Application; 

public class WSApp extends Application { 
} 

在web.xml中,您只需指向此應用程序類,並且此包和下面的其他類將被註冊。

<servlet> 
    <servlet-name>REST-Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>path.to.your.ws.WSApp</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>REST-Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

相反莫西你還可以試試下面的球衣媒體模塊(我沒有他們相比):

<dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.13</version> 
    </dependency> 

而且我建議讀這篇文章

http://blog.dejavu.sk/2013/11/19/registering-resources-and-providers-in-jersey-2/

相關問題