删除Transfer-Encoding:在POST请求中分块?

我使用以下代码发送POST请求,但请求以chunked( Transfer-Encoding: chunked )的forms发送。 我搜索了这个问题并说它包含了Content-Length但是在下面的代码中我无法弄清楚如何设置Content-Length

 @RequestMapping(value = "/contacts", method = RequestMethod.POST) public Map addContactInfo( @RequestBody Map ContactInfoDto) { ContactInfo contactInfo = ContactInfoDto.get("contact"); if (contactInfo == null) { throw new IllegalArgumentException("Contact not found."); } contactInfo = this.contactInfoManager.addNew(contactInfo); Map map = new HashMap(); map.put("contact", contactInfo); return map; } 

您可以使用ResponseEntity显式设置标头。 棘手的一点是弄清楚你的内容实际有多长:

 @RequestMapping(value = "/contacts", method = RequestMethod.POST) public ResponseEntity> addContactInfo(@RequestBody Map contactInfoDto) throws JsonProcessingException { ContactInfo contactInfo = contactInfoDto.get("contact"); if (contactInfo == null) { throw new IllegalArgumentException("Contact not found."); } contactInfo = this.contactInfoManager.addNew(contactInfo); Map map = new HashMap<>(); map.put("contact", contactInfo); HttpHeaders headers = new HttpHeaders(); headers.set(HttpHeaders.CONTENT_LENGTH, String.valueOf(new ObjectMapper().writeValueAsString(map).length())); return new ResponseEntity>(map, headers, HttpStatus.CREATED); } 

测试:

 $ curl -v http://localhost:8080/contacts/ -X POST -d '{ "contact": { "name": "foo" } }' -H 'Content-Type: application/json' && echo * Trying ::1... * Connected to localhost (::1) port 8080 (#0) > POST /contacts/ HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.43.0 > Accept: */* > Content-Type: application/json > Content-Length: 32 > * upload completely sent off: 32 out of 32 bytes < HTTP/1.1 201 Created < Server: Apache-Coyote/1.1 < X-Application-Context: application < Content-Type: application/json;charset=UTF-8 < Content-Length: 26 < Date: Fri, 10 Jun 2016 13:24:23 GMT < * Connection #0 to host localhost left intact {"contact":{"name":"foo"}} 

以下代码:

 @RequestMapping(value = "/contacts", method = RequestMethod.POST) public Map addContactInfo( @RequestBody Map ContactInfoDto, @RequestHeader(value = HttpHeaders.CONTENT_LENGTH, required = true) Long contentLength ) { ... } 

可用于要求发送Content-Length标头。 请注意,您还必须在发送请求的代码中添加该标头(大多数客户端会自动执行此操作但更好地检查)