[SPRING] Transfer-Encoding 제거 : POST 요청에 청크가 있습니까?
SPRINGTransfer-Encoding 제거 : POST 요청에 청크가 있습니까?
다음 코드를 사용하여 POST 요청을 보내 겠지만 요청은 청크 분할 (전송 인코딩 : 청크 분할) 형식으로 전송됩니다. 나는이 문제에 대해 봤지만 Content-Length를 포함한다고 말하고 있지만 아래 코드에서는 어떻게 Content-Length를 설정할 수 있는지 알 수 없었다.
@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;
}
해결법
-
==============================
1.ResponseEntity를 사용하여 헤더를 명시 적으로 설정할 수 있습니다. 까다로운 점은 콘텐츠의 실제 길이를 알아내는 것입니다.
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"}}
-
==============================
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 헤더를 전송하는 데 사용할 수 있습니다. 요청을 보내는 코드에이 헤더를 추가해야한다는 점에 유의하십시오 (클라이언트의 대부분은 자동으로 수행하지만 더 나은 검사를 수행함)
from https://stackoverflow.com/questions/35200216/remove-transfer-encodingchunked-in-the-post-request by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 jpa : 결과 튜플에서 별칭을 찾을 수 없습니다! 쿼리가 별칭을 정의하는지 확인하십시오. (0) | 2019.01.23 |
---|---|
[SPRING] Java에서 yaml로부터 맵 읽기 (0) | 2019.01.23 |
[SPRING] 속성 파일에서 값을 가져 와서 주석에 사용하는 방법? (0) | 2019.01.23 |
[SPRING] Spring 속성 파일에서 Escape 속성 참조 (0) | 2019.01.23 |
[SPRING] Java Spring WS org.springframework.ws.soap.saaj.SaajSoapEnvelopeException : 봉투에 액세스 할 수 없습니다. (0) | 2019.01.23 |