无法显示来自 Jersey 的 JSP:找不到媒体类型 =text/html 的 MessageBodyWriter
Not able to show JSP from Jersey : MessageBodyWriter not found for media type=text/html
我遇到以下错误,我的 JSP 没有被加载。
[info] JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2016-06-07 13:04:16 INFO ReportController:242 - welcome page load called
Jun 07, 2016 1:04:16 PM 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.
但是我所有的 JSON url 工作正常。
以下是我的代码块。
@Path("/reports")
public class ReportController extends SpringBeanAutowiringSupport {
@POST
@Path("/submitReport")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public ReportDTO submitReportCall (ReportDTO submitReportRequest) {
//.....
}
@GET
@Path("/test")
public Viewable index(@Context HttpServletRequest request) {
request.setAttribute("obj", new String("IT Works"));
LOGGER.info("welcome page load called");
return new Viewable("/WEB-INF/jsp/main.jsp", null);
}
}
web.xml如下
<servlet>
<servlet-name>jersey-serlvet</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.mytool.rest.service</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
<param-value>/WEB-INF/jsp</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>
<load-on-startup>1</load-on-startup>
</servlet>
====编辑====
已修改 web.xml 并使用过滤器
<filter>
<filter-name>jersey-serlvet</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.aol.compoundtool.rest.service</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature, org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
<param-value>/WEB-INF/jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey-serlvet</filter-name>
<url-pattern>/aol/*</url-pattern>
</filter-mapping>
我在 Jersey 2.22.2 上遇到了同样的问题。这是使用 Jetty 9ish
就我而言,我失踪了
<dependency org="org.glassfish.jersey.ext" name="jersey-mvc-jsp" rev="2.22.2"/>
针对该特定错误消息。
Ivy 也没有获得其他必需的依赖项。
检查https://eclipse-ee4j.github.io/jersey.github.io/documentation/2.22.2/modules-and-dependencies.html#modules
在 url 中为正确版本的文档
替换你的球衣版本
我的过滤器定义
<filter>
<filter-name>jersey-servlet</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.foo.services.mobile.resource,
com.fasterxml.jackson.jaxrs.json
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
org.glassfish.jersey.media.multipart.MultiPartFeature,
org.glassfish.jersey.server.mvc.jsp.JspMvcFeature
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</filter>
<filter-mapping>
<filter-name>jersey-servlet</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
支持分段上传和JSP MVC 这些是我的依赖项。
但是获取编译下列出的所有内容,以了解您正在使用的功能。并测试是否要测试。
我遇到以下错误,我的 JSP 没有被加载。
[info] JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2016-06-07 13:04:16 INFO ReportController:242 - welcome page load called
Jun 07, 2016 1:04:16 PM 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.
但是我所有的 JSON url 工作正常。
以下是我的代码块。
@Path("/reports")
public class ReportController extends SpringBeanAutowiringSupport {
@POST
@Path("/submitReport")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public ReportDTO submitReportCall (ReportDTO submitReportRequest) {
//.....
}
@GET
@Path("/test")
public Viewable index(@Context HttpServletRequest request) {
request.setAttribute("obj", new String("IT Works"));
LOGGER.info("welcome page load called");
return new Viewable("/WEB-INF/jsp/main.jsp", null);
}
}
web.xml如下
<servlet>
<servlet-name>jersey-serlvet</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.mytool.rest.service</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
<param-value>/WEB-INF/jsp</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>
<load-on-startup>1</load-on-startup>
</servlet>
====编辑====
已修改 web.xml 并使用过滤器
<filter>
<filter-name>jersey-serlvet</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.aol.compoundtool.rest.service</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>org.glassfish.jersey.media.multipart.MultiPartFeature, org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name>
<param-value>/WEB-INF/jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey-serlvet</filter-name>
<url-pattern>/aol/*</url-pattern>
</filter-mapping>
我在 Jersey 2.22.2 上遇到了同样的问题。这是使用 Jetty 9ish
就我而言,我失踪了
<dependency org="org.glassfish.jersey.ext" name="jersey-mvc-jsp" rev="2.22.2"/>
针对该特定错误消息。 Ivy 也没有获得其他必需的依赖项。
检查https://eclipse-ee4j.github.io/jersey.github.io/documentation/2.22.2/modules-and-dependencies.html#modules 在 url 中为正确版本的文档
替换你的球衣版本我的过滤器定义
<filter>
<filter-name>jersey-servlet</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.foo.services.mobile.resource,
com.fasterxml.jackson.jaxrs.json
</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
org.glassfish.jersey.media.multipart.MultiPartFeature,
org.glassfish.jersey.server.mvc.jsp.JspMvcFeature
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</filter>
<filter-mapping>
<filter-name>jersey-servlet</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
支持分段上传和JSP MVC 这些是我的依赖项。