훈훈훈
Spring :: @RequestBody with Multiple Object arguments 오류 정리 본문
Spring Framework/개념
Spring :: @RequestBody with Multiple Object arguments 오류 정리
훈훈훈 2020. 10. 11. 01:40- 문제 발생한 코드
> 예제코드는 Kotlin으로 작성되었습니다.
@PostMapping("/testController")
fun testController(
@RequestBody testDTO1: TestDTO1,
@RequestBody testDTO2: TestDTO2
): ResponseEntity<Void> {
return ResponseEntity(HttpStatus.OK)
}
PostMapping 할 때 두개 이상 @RequestBody를 받는 경우 JSON parse error 발생
- 원인
request 할 때 Input Stream 은 한번만 실행이 된다.
따라서 두번째 인자를 받을땐 Input Stream 이 close 상태이기 때문에 에러가 발생
즉, RequestBody annotation은 Single Object만 바인딩 가능
해당 이슈 관련해서는 Spring Project github에서도 언급됨
github.com/spring-projects/spring-framework/pull/24533
github.com/spring-projects/spring-framework/issues/24894
- 해결 방법
1. function 분리
@PostMapping("/test1Controller")
fun test1Controller(
@RequestBody testDTO1: TestDTO1
): ResponseEntity<Void> {
return ResponseEntity(HttpStatus.OK)
}
@PostMapping("/test2Controller")
fun test2Controller(
@RequestBody testDTO2: TestDTO2
): ResponseEntity<Void> {
return ResponseEntity(HttpStatus.OK)
}
2. testDTO1, testDTO2를 wrapping한 DTO 생성 후, 해당 DTO 인자로 받음
@PostMapping("/testController")
fun testController(
@RequestBody newTestDTO: NewTestDTO
): ResponseEntity<Void> {
return ResponseEntity(HttpStatus.OK)
}
'Spring Framework > 개념' 카테고리의 다른 글
Spring boot :: QueryDSL을 사용해서 No Offset Paging 구현하기 (0) | 2021.01.10 |
---|---|
Spring boot :: JPA에서 OneToOne 관계 N+1 문제 정리 (0) | 2020.12.28 |
Spring boot :: Kotlin + Hibernate 사용 시, lazy loading 이슈 정리 (1) | 2020.12.19 |
Spring Security :: CSRF protection disable option 대한 생각 정리 (0) | 2020.10.20 |
Spring Framework :: IntelliJ 환경에서 Spring MVC 초기 설정 (0) | 2020.05.20 |
Comments