728x90
반응형

개요

API를 개발하다보면 처리에 따라서 응답에 특정한 헤더를 내려준다던지, 스테이터스 코드를 조작하여 응답하는 경우가 있다. 이럴때 전통적인 Spring MVC를 사용하면 문제가 되지 않지만 Spring WebFlux로 개발하게 되면 기본적으로 Mono 또는 Flux로 리턴하는것이 원칙이기 때문에 어떻게 처리해야할지 난감스러울 수 있다. 


Spring WebFlux는 함수형 방식과 애노테이션 방식 이렇게 2가지 프로그래밍 모델을 지원한다. 함수형 방식은 ServerResponse를 사용해서 부가적인 응답을 처리할 수 있지만, 애노테이션 방식으로 개발을 하면서 ServerResponse를 사용하게 되면
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$WriterFunctionResponse and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)과 같은 에러를 볼수있다.


이에 대한 해결책으로 Spring MVC에서 사용하던 ResponseEntity를 그대로 사용하면된다. 아래 코드를 보고 확인해보자.

예제

아래 코드는 사용자가 성인인지 체크한 후 맞다면 "X-User-Adult" 헤더와 스테이터스 코드 200 Ok를 응답으로 내려주고, 성인이 아니라면 403 Fobidden을 응답하도록 만든 예제이다.

결론

예제처럼 Mono 또는 Flux로 ResponseEntity를 감싸면 쉽게 헤더 및 스테이터스 코드 조작이 가능하다.

728x90
반응형

+ Recent posts