【发布时间】:2014-09-04 21:01:19
【问题描述】:
我正在使用 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();
}
但是,length 和 length2 分别返回 -1 和 null。如果我监视 Fiddler 并查看请求,我注意到请求中的 contentLength 不是 -1,而是一个正确的值。
关于为什么我无法获得请求内容长度的任何想法?谢谢。
编辑:我的 PUT 请求使用 Advanced Rest Client Chrome 扩展程序如下所示:http://i.imgur.com/aI6WNDy.png
编辑:不确定我还有什么要补充的,但对此有任何想法都会很棒。
【问题讨论】:
-
无法重现您的问题。能否尝试使用 RESTeasy 客户端进行测试:
WebTarget target = ClientBuilder.newClient().target("yourUrl"); MultipartFormDataOutput formData = new MultipartFormDataOutput(); formData.addFormData("data", "Hello World", MediaType.TEXT_PLAIN_TYPE); Entity<MultipartFormDataOutput> entity = Entity.entity(formData, MediaType.MULTIPART_FORM_DATA); Response response = target.request().put(entity); -
有时间我会试一试。感谢您的回复。
-
我无法使用 RESTeasy 客户端构建它。我觉得奇怪的是,在 Fiddler 中我得到了一个内容长度,但在请求期间我无法查看它。
-
“无法使用 RESTeasy 客户端构建”是什么意思?
-
public Response addData(@HeaderParam("Content-Length") int length, final @PathParam("key") String dataKey, MultipartFormDataInput data) ?
标签: java rest resteasy multipartform-data