2017-02-18 31 views
0

Допустим, у меня есть два ресурса, и оба возвращают JSON. Для request1 я хочу использовать jackson mixin для подготовки возвращенного JSOn. Для request2 я не хочу использовать какие-либо микшины.Spring MVC/Jackson: Reset objectMapper после завершения

Вопрос: Как сбросить смесины после запроса1? Объект mapper является весной фасоль/singleton.

Код:

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

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

Конечно, я могу сбросить на Примеси в getSomething2() и во всех других методах в начале, но я скорее хочу сделать это после сдачи в getSomething1. Поэтому метод, который модифицировал objectMapper, должен отменить его изменения.

EDIT: Как упоминалось в JBNizet, это не является потокобезопасным. Кто-нибудь знает лучший способ использования джексон-миксинов только в одном методе?

+0

У меня нет хорошего решения, но ваше желаемое решение было бы неправильным: ObjectMapper - это singleton, используемый всеми контроллерами, и запросы обрабатываются одновременно несколькими контроллерами или несколькими способами такой же контроллер. –

+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.