Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MultipartFormDataInput请求的内容长度始终为-1_Java_Rest_Resteasy_Multipartform Data - Fatal编程技术网

Java MultipartFormDataInput请求的内容长度始终为-1

Java MultipartFormDataInput请求的内容长度始终为-1,java,rest,resteasy,multipartform-data,Java,Rest,Resteasy,Multipartform Data,我使用RESTEasy按键和值放置一些数据。我只接受大小小于4k的数据,我想通过获取请求的内容长度进行检查。以下是我正在使用的方法: @PUT @Path("/{key}") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response addData( final @PathParam("key") String dataKey, MultipartFormDataInput data) throws IOException, Cla

我使用RESTEasy按键和值放置一些数据。我只接受大小小于4k的数据,我想通过获取请求的内容长度进行检查。以下是我正在使用的方法:

@PUT
@Path("/{key}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response addData(
  final @PathParam("key") String dataKey,
  MultipartFormDataInput data) throws IOException, ClassNotFoundException {

  final HttpServletRequest request = ....getHttpRequest(); //returns the request

  final Map<String, List<InputPart>> parts = data.getFormDataMap();
  final List<InputPart> inputParts = parts.get("data");
  final InputPart part= inputParts.get(0);    
  final InputStream dataStream = part.getBody(InputStream.class, null);

  int length = request.getContentLength();
  String length2 = request.getHeader("Content-Length");
  System.out.println(length);
  System.out.println(length2);

  service.addData(key, dataStream);

  return Response.status(204).build();
}
@PUT
@路径(“/{key}”)
@使用(MediaType.MULTIPART\u FORM\u数据)
公共响应添加数据(
最终@PathParam(“键”)字符串数据键,
MultipartFormDataInput数据)引发IOException,ClassNotFoundException{
final HttpServletRequest request=..getHttpRequest();//返回请求
最终映射部分=data.getFormDataMap();
最终列表inputParts=parts.get(“数据”);
最终InputPart部分=inputParts.get(0);
最终InputStream数据流=part.getBody(InputStream.class,null);
int length=request.getContentLength();
stringlength2=request.getHeader(“内容长度”);
系统输出打印长度;
系统输出打印LN(长度2);
addData(key,dataStream);
返回Response.status(204.build();
}
但是,
length
length2
分别返回
-1
null
。如果我监视Fiddler并查看请求,我会注意到请求上的
contentLength
不是
-1
,而是一个正确的值

关于为什么我不能获取请求内容长度,有什么想法吗?谢谢

编辑:我的PUT请求使用高级Rest客户端Chrome扩展如下所示:


编辑:我不确定我还有什么要补充的,但对此有什么想法就好了。

看看
@HeaderParam
是否适合你


无法重现您的问题。您是否可以尝试使用RESTeasy客户端进行测试:
WebTarget target=ClientBuilder.newClient().target(“您的URL”);MultipartFormDataOutput formData=新的MultipartFormDataOutput();addFormData(“数据”,“你好世界”,MediaType.TEXT\u PLAIN\u TYPE);实体=实体.实体(formData,MediaType.MULTIPART\u FORM\u DATA);响应=target.request().put(实体)final@HeaderParam(“Content-Length”)字符串contentLength
,但结果是相同的:
null
。我真的不明白在调试该方法时如何得到
null
/
-1
,但在Fiddler中查看时却正确。这可能与作为输入流的输入数据有关,并且不知道传入数据的长度,因此返回null/-1吗?我只是大声说出来。你们需要整个有效负载的长度,或者特定数据元素的长度