2016-05-31 49 views
1

JSON以外のメディアタイプの応答を生成しようとすると、「MessageBodyWriter」エラーが見つかりません。 しかし、応答はApplication_JSON出力に対して正常に機能します。 私はMaven POMでいくつかの依存関係を使用していますので、おそらくMessageBodyWriterはオーバーライドされています。ここでメディアタイプ= text/htmlのMessageBodyWriterは見つかりませんでしたが、JSONの場合

がポンポン依存している -

<dependencies> 
     <dependency> 
      <groupId>org.postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.2-1003-jdbc4</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.25</version> 
     </dependency> 
     <!-- http://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api --> 
     <dependency> 
      <groupId>javax.ws.rs</groupId> 
      <artifactId>javax.ws.rs-api</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-client</artifactId> 
      <version>2.22.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.22.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-moxy</artifactId> 
      <version>2.22.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-multipart</artifactId> 
      <version>2.15</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-sse</artifactId> 
      <version>2.15</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-jaxb</artifactId> 
      <version>2.17</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.ext</groupId> 
      <artifactId>jersey-mvc</artifactId> 
      <version>2.5.1</version> 
     </dependency> 

     <!-- http://mvnrepository.com/artifact/javax.ws.rs/jsr311-api --> 
     <dependency> 
      <groupId>javax.ws.rs</groupId> 
      <artifactId>jsr311-api</artifactId> 
      <version>1.1.1</version> 
     </dependency> 



     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-dbcp2</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-core-asl</artifactId> 
      <version>1.9.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-asl </artifactId> 
      <version>1.9.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.owlike</groupId> 
      <artifactId>genson</artifactId> 
      <version>1.4</version> 
     </dependency> 

    </dependencies> 

私が使用していますサンプルJavaクラスがある -

また
package com.va; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import org.glassfish.jersey.server.mvc.Viewable; 

@Path("orders") 
public class OrderView{ 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable index() { 
     return new Viewable("index"); 
    } 

} 

私はWebアプリケーションフォルダに私のindex.htmファイルを保持しています。 web.xmlの設定がようである - URLのローカルホストにアクセスするには

<servlet> 
    <servlet-name>Jersey REST Service</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.va</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> 
     <param-value>/webapp</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
     <param-value>/(webapp)/.*</param-value> 
    </init-param> 

    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

:8080/myappに/受注 私は

org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo 
SEVERE: MessageBodyWriter not found for media type=text/html, type=class org.glassfish.jersey.server.mvc.Viewable, genericType=class org.glassfish.jersey.server.mvc.Viewable. 

としてHTTP 500エラーとコンソールのエラーを取得するものと私を導いてください。問題です。 :)あらかじめありがとうございます。

+0

私はこの機能を登録する必要があると思います。ここをクリックしてください。http://stackoverflow.com/questions/19865738/cannot-have-jsp-page-load-with-jersey-server –

+0

@ChrisHinshaw私がすでに登録しているJspMvcFeature。 web.xmlコードをチェックするとそこにあります。 – devutkarsh

答えて

1

ジャージーのmvcテンプレートを使用している場合、serlvetではなくサーブレットフィルタを使用する必要があります。また、initパラメータの中には、Jersey 1を参照するものもあり、Jersey 2相当のものに変更する必要があります。 More here Jersey MVC Template

web.xmlが更新されました。試してみる。

<filter> 
    <filter-name>Jersey REST Service</filter-name> 
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.va</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.jackson.JacksonFeature</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.mvc.templateBasePath</param-name> 
     <param-value>/webapp</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value> 
    </init-param> 
    <init-param> 
    <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
    <param-value>true</param-value> 
</init-param> 
    <load-on-startup>1</load-on-startup> 
    </filter> 

    <filter-mapping> 
    <filter-name>Jersey REST Service</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
関連する問題