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

时间:2013-08-20 16:10:53

标签: 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"/>
    </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状态会出现吗?

1 个答案:

答案 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>