REST- Jersey - 获取参数的异常

时间:2015-10-20 13:26:41

标签: java 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)

1 个答案:

答案 0 :(得分:0)

尝试:

@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请求实体主体,其中包含一个可选的命名主体部分"启用"以及两个必需的命名正文部分datafile

     

可选部分enabled被处理为boolean值,如果部分不存在则值为真。

     

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

     

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