2016-05-31 5 views
1

Das Problem ist, dass, wenn ich versuche, Antwort von Medientyp etwas anderes als JSON zu produzieren, bekomme ich "MessageBodyWriter" nicht gefunden Fehler. Aber die Antwort funktioniert gut für Application_JSON-Ausgaben. Ich verwende mehrere Abhängigkeiten in meinem Maven POM, vielleicht wird MessageBodyWriter überschrieben oder vielleicht nur für JSON ist es enthalten.MessageBodyWriter nicht für media type = text/html aber funktioniert für JSON

Hier sind die pom Abhängigkeiten -

<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> 

Die Probe Java-Klasse verwende ich ist -

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"); 
    } 

} 

Auch habe ich meine Datei index.htm in Webapp Ordner gehalten. Die Konfiguration für web.xml ist als -

<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> 

Auf die URL localhost Zugriff auf: 8080/myapp/Bestellungen I HTTP 500 Fehler und Konsole Fehler erhalten, wie

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. 

Bitte leite mich mit dem, was ist das Problem. Vielen Dank im Voraus. :)

+0

Ich denke, Sie müssen die Funktion registrieren. Überprüfen Sie hier http://StackOverflow.com/Questions/19865738/Cannot-Have-JSP-PageLoad-with-jersey-Server –

+0

@ChrisHinshaw der JspMvcFeature Ich habe bereits registriert. Es ist dort, wenn Sie den Code web.xml überprüfen. – devutkarsh

Antwort

1

Paar Dinge zu beachten, hier sollten Sie Servlet Filter nicht serlvet verwenden, wenn Sie Jersey mvc Vorlage verwenden. Einige Ihrer Init-Parameter, die sich auf Jersey 1 beziehen, sollten ebenfalls in Jersey 2-Äquivalent geändert werden. Mehr hier Jersey MVC Template

Aktualisierte web.xml. Versuche es.

<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> 
Verwandte Themen