2015-09-25 2 views
1

Я собираюсь отобразить html с помощью «Thymeleaf», но приводятся следующие ошибки. Использование сервера - tomcat8. Мой код выглядит.Jersey MessageBodyWriter не найден для media type = text/html

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.abc.def</groupId> 
<artifactId>jersey_de</artifactId> 
<packaging>war</packaging> 
<version>0.0.1-SNAPSHOT</version> 
<name>jersey_de</name> 

<build> 
    <finalName>jersey_de</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.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <!-- my setting --> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>2.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>2.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.connectors</groupId> 
     <artifactId>jersey-apache-connector</artifactId> 
     <version>2.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
     <version>2.21</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.ext</groupId> 
     <artifactId>jersey-mvc</artifactId> 
     <version>2.21</version> 
    </dependency> 
    <!-- 
    <dependency> 
     <groupId>org.glassfish.jersey.ext</groupId> 
     <artifactId>jersey-mvc-jsp</artifactId> 
     <version>2.21</version> 
    </dependency> 
    --> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf</artifactId> 
     <version>2.1.4.RELEASE</version> 
    </dependency> 
</dependencies> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 

web.xml

<?xml version="1.0" encoding="UTF-8"?> 

http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd» версия = "3.0"> Веб-приложение для женщин org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages com.abc.def.jersey_de com.abc.def.jersey_de.ThymeleafViewProcessor /WEB-INF/просмотр/ Джерси Веб-приложение /WebAPI/*

javacode

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; 

import com.abc.def.jersey_de.domain.TestPOJO; 

@Path("top") 
@Produces(MediaType.TEXT_PLAIN) 
public class DemoCtrl { 


    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public Viewable getIt() { 
     Viewable vb = new Viewable("test",new TestPOJO()); 
     System.out.println("top end"); 
     return vb; 
    } 
} 

ThymeleafViewProcessor

@Provider 
public class ThymeleafViewProcessor implements TemplateProcessor<String> { 

    @Context 
    private HttpServletRequest request; 

    @Context 
    private HttpServletResponse response; 

    @Context 
    private ServletContext servletContext; 

    private final TemplateEngine templateEngine; 

    /** 
    * コンストラクタ 
    */ 
    public ThymeleafViewProcessor() { 

     TemplateResolver resolver = new ServletContextTemplateResolver(); 
     resolver.setPrefix("/WEB-INF/view/"); 
     resolver.setSuffix(".html"); 
     resolver.setTemplateMode("HTML5"); 
     resolver.setCacheTTLMs(3600000L); 

     templateEngine = new TemplateEngine(); 
     templateEngine.setTemplateResolver(resolver); 
     System.out.println("ThymeleafViewProcessor end"); 
    } 

    /** 
    * 参照させるファイル名を解決する。 
    */ 
    @Override 
    public String resolve(String name, MediaType mediaType) { 

     return name; 
    } 

    @Override 
    public void writeTo(String templateReference, Viewable viewable, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream out) throws IOException { 

     WebContext context = new WebContext(request, response, servletContext); 

     //HTML内でモデルオブジェクトを使用できるようにしている。 
     //ここはモデル名をそのまま使用できるようにした方が良い。 
     context.setVariable("item", viewable.getModel()); 

     Writer writer = new OutputStreamWriter(out); 
     templateEngine.process(templateReference, context, writer); 

     writer.flush(); 
    } 
} 

ApplicationSetting

@ApplicationPath("/service") 
public class ApplicationSetting extends ResourceConfig { 

    public ApplicationSetting() { 

     packages(this.getClass().getPackage().getName()); 

     register(ThymeleafViewProcessor.class); 
     register(MvcFeature.class); 
     register(LoggingFilter.class); 
     System.out.println("ApplicationSetting "); 
    } 

} 
+0

Я понимаю it.It делает оригинальный .Я добавил шнур на вопрос. – user3743289

ответ

0

Это было улажено. Точки, которые я пересмотрел, следующие.

web.xml

<init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.abc.def.jersey_de.MyApplication</param-value> 
    </init-param> 

ПОМ

<dependencies> 
    <dependency> 
     <groupId>javax</groupId><!-- 動きが変わらないので不要? --> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-servlet-api</artifactId> 
     <version>8.0.15</version> 
    </dependency> 
    <dependency><!-- 不要? --> 
     <groupId>org.glassfish.jersey</groupId> 
     <artifactId>jersey-bom</artifactId> 
     <version>${jersey.version}</version> 
     <type>pom</type> 
     <scope>import</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.ext</groupId> 
     <artifactId>jersey-mvc</artifactId> 
     <version>${jersey.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.thymeleaf</groupId> 
     <artifactId>thymeleaf</artifactId> 
     <version>2.1.4.RELEASE</version> 
    </dependency> 
</dependencies> 
<properties> 
    <jersey.version>2.21</jersey.version> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties>