Spring MVC文件上传返回-415不支持的媒体类型

时间:2019-01-30 05:40:54

标签: java spring spring-mvc file-upload multipartform-data

我正在编写一个Web服务,以将图像/视频文件上传到服务器。每次我从邮递员致电我的上传Web服务时,它都会返回 415不支持的媒体类型。 这是我所做的。

在我的控制器中:

@POST
@Path("/upload")
@Produces(MediaType.MULTIPART_FORM_DATA)
public Response upload(@RequestParam("file") MultipartFile files) {
    Response.ResponseBuilder rb;

    rb = Response.status(Response.Status.OK);
    rb.entity(new ResponseWrapper<String>(SUCCESS, ""));
    return rb.build();
}

应用上下文:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10000000"/>
</bean>

我已经添加了commons-fileupload-1.2.2.jarmimepull.jar

当我调用Web服务时,会收到以下控制台日志。

    com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class org.springframework.web.multipart.MultipartFile, and Java type interface org.springframework.web.multipart.MultipartFile, and MIME media type multipart/form-data; boundary=--------------------------410903058421289672087091 was not found.
The registered message body readers compatible with the MIME media type are:
multipart/* ->
  com.sun.jersey.multipart.impl.MultiPartReaderServerSide
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  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.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy

我已经尝试了很多挖掘互联网的方法,但仍然不起作用。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用以下格式设置内容类型

rb.type(MediaType.TEXT_PLAIN)

根据需要更改媒体类型。上例中提供的text_plain应该设置text/plain

答案 1 :(得分:0)

建议中有两项更改:

  1. @produces更改为@consumes,因为此api正在接受multipart/form-data文件。
  2. 将@RequestParam更改为@RequestPart