Http 在Mule中使用Jersey实现文件上载时出现不支持的媒体类型(415)错误

Http 在Mule中使用Jersey实现文件上载时出现不支持的媒体类型(415)错误,http,file-upload,jersey,mule,Http,File Upload,Jersey,Mule,我正在尝试使用Mule中的Jersey模块实现文件上传 我的骡子流如下所示: <flow name="rest-service"> <inbound-endpoint address="http://localhost:9999/testupload"/> <jersey:resources> <component class="com.example.test.UploadFileResource"/> &

我正在尝试使用Mule中的Jersey模块实现文件上传

我的骡子流如下所示:

<flow name="rest-service">
    <inbound-endpoint address="http://localhost:9999/testupload"/>
    <jersey:resources>
        <component class="com.example.test.UploadFileResource"/>
    </jersey:resources>
</flow> 
/**
 * 
 */
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);
    }
}
但是,当我将@Consumes注释与多部分表单数据媒体类型(如下所示)放在一起时,该方法不会被调用,并且我会得到HTTP 415不支持的媒体类型,即使使用多部分/表单数据内容类型发出HTTP Post请求:

@Path("/uploadfile")
public class UploadFileResource {

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile2(...) {
        logger.info("Multipart Upload");
        ...
    }
}

知道为什么即使@Consumes Media type与HTTP Post内容类型标头匹配,415状态也会出现吗?

您可能需要按照Jersey文档第章中的说明注册MultipartFeature

创建一个类,如下所示:

<flow name="rest-service">
    <inbound-endpoint address="http://localhost:9999/testupload"/>
    <jersey:resources>
        <component class="com.example.test.UploadFileResource"/>
    </jersey:resources>
</flow> 
/**
 * 
 */
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);
    }
}
并将以下init参数添加到web.xml中的Jersey servlet:

     <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.verico.multipart.app.MultiPartApp</param-value>
    </init-param>

javax.ws.rs.Application
com.verico.multipart.app.MultiPartApp

upload2()方法的输入参数是什么样子的?我尝试了两个版本:一个没有任何输入参数,即
uploadFile2()
,另一个有两个输入参数,即
uploadFile2(@FormDataParam(“file”)InputStream uploadedInputStream,@FormDataParam(“file”)formdatacontentdispositionfiledetail)
。我在这两种情况下都得到了相同的结果。你能试着打开跟踪支持(如上所述)并发布响应头来看看发生了什么吗?你的类路径上有jersey multipart JAR吗?