REST- Jersey -异常获取参数



这是我的ajax调用:

uploadExcel : function(jsonData,success, error) {
    var url = "/TestProject/test/Uploader;
    $.ajaxFileUpload({ 
        url : url,
        secureuri : false,
        fileElementId : 'FileUpload',
        contentType : 'multipart/form-data',
        dataType : 'jsonString',
        processData : false,
        type : 'POST',
        data: jsonData,
        success : success,
        error : error
    });
}

Java方法签名:

@Path("/Uploader") 
@POST
@Consumes('multipart/form-data')
public String validateAndUpload(@FormDataParam("FileUpload") byte[] inputByteArray, 
                                @Context HttpServletRequest request,
                                @FormParam("jsonData") String uploadData) {}

这是我得到的错误

下面是stackTrace:
    SEVERE: Servlet.service() for servlet [ServletAdaptor] in context with path    [/TestProject] threw exception [com.sun.jersey.api.container.ContainerException: Exception obtaining parameters] with root cause
java.lang.NullPointerException
at com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:43)
at com.sun.jersey.multipart.impl.FormDataMultiPartDispatchProvider$FormDataInjectableValuesProvider.getInjectableValues(FormDataMultiPartDispatchProvider.java:115)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:126)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:154)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:163)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:71)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)

尝试:

@FormDataParam("FileUpload") InputStream fileInputStream

代替:

@FormDataParam("FileUpload") byte[] inputByteArray

根据FormDataParam API,支持如下:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA_TYPE)
public String postForm(
        @DefaultValue("true") @FormDataParam("enabled") boolean enabled,
        @FormDataParam("data") FileData bean,
        @FormDataParam("file") InputStream file,
        @FormDataParam("file") FormDataContentDisposition fileDisposition) {
    ...
}

来自javadoc:

服务器使用multipart/form-data请求实体体,其中包含一个可选的命名体部分"enabled"和两个必需的命名体部分datafile

可选部分enabled作为boolean值处理,如果该部分不存在,则该值将为true。

部分data作为JAXB bean处理,并包含关于以下部分的一些元数据。

部分file是上传的文件,这是作为InputStream处理的。关于Content-Disposition头文件的其他信息可以通过参数fileDisposition访问。

最新更新