2017-02-15 4 views
0

요청은 다음 오류와 함께 실패 HttpMessageNotReadableException와 함께 실패 @PostMapping 모든하지만 마법처럼 작동에봄 @GetMapping 엔드 포인트에

400 Bad request org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing

@GetMapping 
public List<SomeObject> list(@RequestParam(required = false) String parameter, @RequestBody String body, @RequestHeader("Authorization") String token) { 
..... 
} 

@GetMapping 경우 변경 될 것이다. 도대체 무슨 일이 일어나고 있는지 아이디어가 있으십니까?

참고 : 자신감는 요청이 전송에 사용되는, 그래서 오류가 컬에 있음을 확실히 가능성이

UPDATE : 봄이 @GetMapping에 대한 @RequestBody을 지원하지 않습니다처럼 그래서, 그것은 보인다. 나는 아직도 이유를 알아낼 수 없다? @DeleteMapping@RequestBody은 잘 작동합니다.

답변

1

@RequestBody annotation은 (POST/PUT) 요청 본문에서 전송 된 콘텐츠를 주석 변수와 바인딩합니다. GET 요청에 'body'부분이 없기 때문에 Spring은 HttpMessageNotReadableException을 throw하여이를 나타냅니다.

일반적으로 '본문'콘텐츠를 포함 할 수있는 요청에 대해서만 @RequestBody을 사용할 수 있습니다. POST 또는 PUT.

+0

흠 ....하지만 GET도 몸을 가질 수 있습니다 - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html 그리고 Spring에서는 GetMapping에 RequestBody를 사용할 수 있습니다. –

+0

같은 기사에서이 줄을보십시오. ** HTTP GET과 HTTP POST를 모두 사용하여 본문으로 검색을 실행할 수 있습니다. 모든 클라이언트가 GET을 본문으로 지원하는 것은 아니기 때문에 POST도 허용됩니다. ** HTTP 표준에 따라 본문이있는 GET 요청이 올바르지 않습니다. –

+0

그래서, Spring은 GetMapping을위한 RequestBody를 지원하지 않습니다. –