这是我的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)
答案 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
请求实体主体,其中包含一个可选的命名主体部分"启用"以及两个必需的命名正文部分data
和file
。可选部分
enabled
被处理为boolean
值,如果部分不存在则值为真。部分
data
作为JAXB bean处理,包含有关以下部分的一些元数据。部分
file
是上传的文件,处理为InputStream
。可以通过参数Content-Disposition
访问有关fileDisposition
标头中文件的其他信息。