我正在使用RESTEasy通過鍵和值來放置某些數據。我只想接受小於4k的數據,我想通過獲取請求的內容長度來檢查數據。下面是我的工作方法:MultipartFormDataInput請求的內容長度始終爲-1
@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請求看起來像這樣使用高級REST客戶端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.entity(formData,MediaType.MULTIPART_FORM_DATA);響應響應= target.request()。put(實體);' –
lefloh
2014-09-06 20:57:13
當我獲得時間時,我會給出一個鏡頭。感謝您的迴應。 – joshft91 2014-09-08 16:46:01
我無法用RESTeasy客戶端構建它。我覺得奇怪的是,在Fiddler中,我得到了內容長度,但在請求期間我無法查看它。 – joshft91 2014-09-24 15:57:32