SMALL

Customizing Response 

애플리케이션을 개발하는 과정에서

응답의 헤더에 특정 값을 추가하고 싶은 경우나

응답의 특정 데이터 값을 교체하고 싶은 경우가 있을 수 있다.

 

이러한 경우에 어떻게 해야 하는지 알아보자.

 

Interface ResponseBodyAdvice + @ControllerAdvice 

ResponseBody 데이터 접근 가능( 수정 가능 ) 

 

interceptor의 경우 postHandler method를 통해 controller 호출 이후에 접근이 가능하지만,

응답 객체에 접근 불가능 ( body에 접근 불가)

@ControllerAdvice
public class TestResponseBodyAdvice implements ResponseBodyAdvice<T> {

    // Implementation
}

 

메서드 설명 

 

@ControllerAdvice
public class TestResponseBodyAdvice implements ResponseBodyAdvice<T> {

    @Override
    public boolean supports(MethodParameter returnType, 
                            Class<? extends HttpMessageConverter<?>> converterType) {
        return true;
    }

    @Override
    public T beforeBodyWrite(T body, MethodParameter returnType, 
                    MediaType selectedContentType,
                    Class<? extends HttpMessageConverter<?>> selectedConverterType, 
                    ServerHttpRequest request,
                    ServerHttpResponse response) {
        
        return body;
    }
}

 

supports 

controller 작업이 끝난 response를 beforeBodyWrite 메서드에 보낼지 판단 

판단하는 기준으로는 해당 메서드의 파라미터인 controller의 returnType정보, messageConverter 정보가 있다.

 

beforeBodyWrite

controller 작업이 끝나고 어떠한 Converter를 통해 응답을 보낼지 결정된 후에 불린다.

다만, Converter를 통하지 않은 상태이다. ( 어떠한 converter를 사용할지는 정해졌지만, 아직 convert 하지는 않은 상태 )

이 메서드에서 실제 사용자가 원하는 body의 값을 교체 또는 response에 헤더 정보를 추가할 수 있다.

 

RequestBodyAdvice

ResponseBodyAdvice와 유사하게 RequestBodyAdvice interface 사용 가능

LIST

+ Recent posts