반응형
에러
In a WebFlux application, form data is accessed via ServerWebExchange.getFormData().
에러 원인
Content-Type이 application/x-www-form-urlencoded 로 요청이 왔는데 @RequestBody를 사용했을 때 발생
해결 방법
1. 에러에서 알려준 방법대로 ServerWebExchange.getFormData()를 사용한다.
// 요청온 form data를 Student로 변경하는 걸 예시
@PostMapping("formData")
fun saveFormData(exchange: ServerWebExchange) = exchange.formData
.map {
m -> m.entries
.associate { it.key to it.value[0] }
.let { jacksonObjectMapper().convertValue<Student>(it) }
}
2. 받고 싶은 DTO를 인자로 명시한다.
@PostMapping("formData")
fun saveFormData2(student: Student) = {}
테스트 해보니 Map<String, String>이나 다른 Collection 타입으로 받을 수 없었습니다.
이유는 정확히 모르겠지만 ServerWebExchange.formData 값이 Mono<MultiValueMap<String, String>> 이여서 그런 게 아닌가 싶은데 정확히 공부를 한 뒤 다시 자세히 업데이트하겠습니다.
추가 지식
webflux에선 특정 Content-Type만 받고 싶은 경우 consumes에 명시해주면 된다.
@PostMapping("formData", consumes = [MediaType.APPLICATION_FORM_URLENCODED_VALUE])
fun saveFormData3(student: Student) = {}
반응형
댓글