我有一个用于fileupload的Jersey应用程序。在启动期间或在我的应用程序中上传文件时,我在WebSphere跟踪日志中遇到以下错误。
错误:
The registered message body writers compatible with the MIME media type are:
application/octet-stream ->
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
[7/12/16 13:26:16:263 CEST] 0000034e ContainerResp E Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.sun.proxy.$Proxy553, and Java type interface javax.servlet.http.HttpServletResponse, and MIME media type application/octet-stream was not found.
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:284)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1510)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
Web.xml中
<servlet>
<servlet-name>my-service</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>my.app.service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
的pom.xml
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>1.19</version>
<exclusions>
<exclusion>
<artifactId>spring-beans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-web</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>spring-aop</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.19</version>
</dependency>
我不确定这里有什么问题?请帮忙。
修改:1
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.jersey.core.header.FormDataContentDisposition;
@Autowired
private ObjectMapper objectMapper;
@POST
@Path("/upload")
@Consumes({MediaType.MULTIPART_FORM_DATA})
public HttpServletResponse attachDocument(@Context HttpServletRequest request,
@Context HttpServletResponse response,
@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition filedata) {
String webServiceResponse = //call webservice here to store document
objectMapper.writeValue(response.getOutputStream(), webServiceResponse);
}
答案 0 :(得分:0)
您不希望从jaxrs资源方法返回HttpServletResponse
。在这种情况下,这是错误日志所说的内容:
Java类com.sun.proxy的消息体编写器。$ Proxy553和Java类型接口javax.servlet.http.HttpServletResponse
接口javax.servlet.http.HttpServletResponse
(由@Context
注入)由代理类com.sun.proxy.$Proxy553
实现。在球衣中,它没有MessageBodyWriter
(除非你添加一个,这不是你想要做的)。
默认情况下,球衣中有MessageBodyWriters
串,主要是在jaxrs specification中命名的第4.2.4节。您可能想要返回javax.ws.rs.core.Response
,例如:
return Response.ok(entity).build();