2016-02-04 4 views
3

Я посылаю запрос POST, используя следующий код, но запрос отправлен в виде chunked (Transfer-Encoding: chunked). Я гугле об этой проблеме, и он говорит, чтобы включить Content-Length, но в коде ниже я не мог понять, как я мог установить Content-Length:Удалить кодирование передачи: помечено в запросе POST?

@RequestMapping(value = "/contacts", method = RequestMethod.POST) 
public Map<String, ContactInfo> addContactInfo(
           @RequestBody Map<String, ContactInfo> ContactInfoDto) { 

    ContactInfo contactInfo = ContactInfoDto.get("contact"); 
    if (contactInfo == null) { 
     throw new IllegalArgumentException("Contact not found."); 
    } 

    contactInfo = this.contactInfoManager.addNew(contactInfo); 
    Map<String, ContactInfo> map = new HashMap<>(); 
    map.put("contact", contactInfo); 

    return map; 

} 
+0

ты получил ответ? –

+1

Я считаю, что это ** Ответ **, а не запрос, который переносится с помощью курсора. –

+0

@RamDuttShukla. Это запрос или ответ, который вы хотите установить на нем «Content-Length»? –

ответ

2

Следующий код:

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

Может использоваться для запроса заголовка Content-Length. Обратите внимание, что вам также необходимо добавить этот заголовок в код, который отправляет запрос (большинство клиентов делают это автоматически, но лучше проверяют)

4

Вы можете использовать ResponseEntity, чтобы установить заголовки явно. Хитростью является выяснение того, как долго ваш контент на самом деле:

@RequestMapping(value = "/contacts", method = RequestMethod.POST) 
public ResponseEntity<Map<String, ContactInfo>> addContactInfo(@RequestBody Map<String, ContactInfo> contactInfoDto) throws JsonProcessingException { 

    ContactInfo contactInfo = contactInfoDto.get("contact"); 
    if (contactInfo == null) { 
     throw new IllegalArgumentException("Contact not found."); 
    } 

    contactInfo = this.contactInfoManager.addNew(contactInfo); 
    Map<String, ContactInfo> 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<String, ContactInfo>>(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"}} 
+0

Спасибо. Эта помощь в решении моей проблемы. –

Смежные вопросы