Я создаю службу REST с помощью аннотированных контроллеров и согласования содержимого (@ResponceBody). У меня есть два разных метода контроллера, возвращающих экземпляр {{Foo}}, который обслуживает разные варианты использования, и я хочу, чтобы JSON-представление {{Foo}} отличалось для этих методов.Spring MVC: Применение различных сериализаторов JSON для разных методов аннотированного контроллера
Например:
@ResponseBody
public Foo method1() {... return new Foo(123); } // should produce '123'
@ResponseBody
public Foo method2() {... return new Foo(123); } // should produce '{name:"Foo", number:123}'
Конечно, я мог бы использовать DTO образец и возвращать различные DTOs в различных методов (например, {{FooDTO1}} и {{FooDTO2}} соответственно), а просто зарегистрировать различные сериализаторы JSON для эти DTO. Но мне интересно, есть ли лучший способ, поскольку мне просто нехорошо определять два дополнительных класса DTO и создавать одноразовые экземпляры этих классов только для того, чтобы применять правильные сериализаторы JSON. Не могу ли я как-то намекнуть на весну или Джексон, какой Serializer следует использовать для какого случая?
Вы можете вернуть строку и сериализовать ее вручную, используя предпочтительную утилиту JSON. – CodeChimp
'должен производить '123'' - выход' 123' не является JSON. Если вы хотите, чтобы это было _String_ '123', то изменение типа возврата в String и реализация toString(), чтобы просто вернуть значение« 123 », могло бы работать – andyb
@CodeChimp, метод контроллера должен возвращать объект, чтобы разрешить содержимое Переговоры. JSON - это просто пример. Могут быть также пара, например, XML-представлений, между которыми мне также нужно будет различать. То, что я ищу, это способ связать конвертер http-сообщений Spring с конкретным методом контроллера или набором методов или методом, аннотированным с некоторыми метаданными и т. Д. – wajda