2017-02-18 2 views
0

두 리소스가 있고 둘 다 JSON을 반환합니다. request1을 위해 나는 반환 된 JSOn을 준비하기 위해 jackson mixin을 사용하고 싶다. request2에 대해서는 어떤 mixins도 사용하고 싶지 않습니다.스프링 MVC/잭슨 : 완료 후 objectMapper 재설정

질문 : request1 후 mixins를 재설정하는 방법은 무엇입니까? 객체 매퍼는 스프링 빈/싱글 톤입니다.

코드 : 물론

@ResponseBody 
public Something getSomething1(..) { 
    .. 
    objectMapper.addMixIn(Something.class, MyMixin.class); 
    return obj; 
} 

@ResponseBody 
public Something getSomething2(..) { 
    .. 
    return obj; 
} 

내가 처음에 getSomething2에서()와 모든 다른 방법의 유지 mixin 설정을 해제 할 수 있지만 오히려 getSomething1의 completition 후하고 싶어. 따라서 objectMapper를 수정 한 메소드는 변경 사항을 취소해야합니다.

편집 : JBNizet에서 언급했듯이 스레드로부터 안전하지는 않습니다. 누구든지 한 가지 방법으로 잭슨 믹스를 사용하는 더 좋은 방법을 알고 있습니까?

+0

나는 좋은 해결책이 없지만 원하는 해결책은 옳지 않습니다. ObjectMapper는 모든 컨트롤러에서 사용되는 싱글 톤이며 요청은 여러 컨트롤러 또는 여러 컨트롤러에서 동시에 처리됩니다. 같은 컨트롤러. –

+0

@JBNizet 동의합니다. 하지만 한 가지 방법으로 만 믹스 인을 사용하는 더 좋은 방법을 알고 있습니까? – NoobieNoob

+0

자신의 ObjectMapper 인스턴스를 만들고 구성하는 것 외에이 매퍼를 사용하여 명시 적으로 응답 본문을 직렬화하는 것 외에는 없습니다. 여기에 설명 된대로 JSON보기를 사용할 수도 있습니다 (https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring). 또는 단순히 무언가를 올바른 구조의 객체로 변환하는 것입니다. –

답변

0

ObjectMapper.copy()을 사용하면 원본과 동일한 구성으로 ObjectMapper을 새로 만들 수 있습니다. 그런 다음 사용자 정의 MixIns를 새 ObjectMapper 인스턴스에 추가하십시오.

관련 문제