我正在尝试使用Mule中的Jersey模块实现文件上传。
我的骡子流看起来像这样:
<flow name="rest-service">
<inbound-endpoint address="http://localhost:9999/testupload"/>
<jersey:resources>
<component class="com.example.test.UploadFileResource"/>
</jersey:resources>
</flow>
如果我没有将@Consumes注释放在UploadFileResource中的资源方法中,如下所示,当使用multipart / form-data Content-type创建HTTP Post请求时,将调用该方法,并获取HTTP 2xx状态代码:< / p>
@Path("/uploadfile")
public class UploadFileResource {
@POST
public Response uploadFile2(...) {
logger.info("Multipart Upload");
...
}
}
但是当我将@Consumes注释与下面的MULTIPART_FORM_DATA媒体类型放在一起时,该方法不会被调用,我得到HTTP 415 Unsupported Media类型,即使使用multipart / form-data Content-type进行HTTP Post请求时:
@Path("/uploadfile")
public class UploadFileResource {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile2(...) {
logger.info("Multipart Upload");
...
}
}
当@Consumes Media类型与HTTP Post Content类型标题匹配时,知道为什么415状态会出现吗?
答案 0 :(得分:1)
您可能需要按照Jersey文档第8.3.1.2 Registration章中的说明注册 MultipartFeature 。
创建一个类似这样的类:
/**
*
*/
package com.verico.multipart.app;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("/")
public class MultiPartApp extends ResourceConfig {
public MultiPartApp() {
super(MultiPartFeature.class);
}
}
在web.xml中将以下init-param添加到Jersey servlet:
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.verico.multipart.app.MultiPartApp</param-value>
</init-param>