2016년 4월 15일 금요일

Spring RestController 의 응답결과에 값 추가하기

Spring RestController 을 이용해서 쉽게 JSON 이나 XML 형태의 값을 클라이언트에게 전송할 수 있습니다. 하지만, 때론 Controller 까지 그 값을 넣어주지 않았는데 일괄적으로 그 값을 보내줘야 할 때가 있습니다.

그럴 경우 하나의 방법으로 WebMvcConfigurerAdapter 을 상속받은 클래스를 만들어 configureMessageConverters 을 Override 하는 방법이 있습니다.

JSON 의 예를 들어보면, Spring 에서 JSON 은 Jackson 을 기본으로 합니다. 그럼 아래와 같은 형태의 Override 을 구현해야 합니다.

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

    }

매개변수로 받게 되는 converters 에 새로운 MessageConverter 을 추가(add method 이용)하는 방식입니다. Jackson 은 AbstractJackson2HttpMessageConverter 을 제공하기 때문에, 이것을 이용해서 writeInternal 을 Override 해서 구현하면 됩니다. 물론 wirteInternal 에 대한 소스는 오픈소스이기 때문에 쉽게 구할 수 있기 때문에, objectWriter.writeValue(generator, value); 이전에 value 에 원하는 값을 추가하면 JSON 에 값이 추가됩니다.

configureMessageConverters 일 이용하면 JSON 뿐만 아니라 Spring 에서 기본 제공하지 않는 MessagePack 같은 것도 converter 로 추가하는 등의 작업이 가능합니다.

댓글 없음:

댓글 쓰기