Когда требуется ручное сопоставление с использованием ObjectMapper Джексона для преобразования pojo в json в аннотированном методе контроллера Spring Rest @ResponseBody?

Я хочу знать, какому правилу следует MappingJackson2HttpMessageConverter для преобразования объекта (возвращенного из метода контроллера, аннотированного @ResponseBody) в json? В некоторых ситуациях я вижу, что достаточно просто иметь Jackson2 в пути к классам (pom.xml), и контроллер просто возвращает свой объект, например. Строка или коллекция, например. List<Employee> успешно перешел в браузер в формате json. Но в других случаях я видел, что решение просит меня использовать ObjectMapper и использовать метод writeValueAsString, чтобы получить строку и вернуть ее в качестве ответа, например HashMaps! Существуют ли какие-то неявные правила, которые MappingJackson2HttpMessageConverter использует, чтобы решить, может ли он выполнить преобразование самостоятельно, или мне нужно сделать это вручную, используя Objectmapper? Если у меня есть объект pojo, который внутри имеет несколько полей String, нужно ли мне использовать ObjectMapper и т. д.? Если нет, то нужно ли мне это, если в моем классе pojo есть такие поля, как некоторые List<CustomObject> и некоторые HashMap? Например: пример 1 не использует любой ObjectMapper для преобразования List<Company> в json в методе контроллера. Но пример 2 требует ObjectMapper и writeValueAsString ? плюс, тип возвращаемого значения теперь String вместо HashMap!


person Kumar Manish    schedule 29.03.2017    source источник


Ответы (1)


Если вы используете @RestController и у вас есть jackson в пути к классу, все будет обработано нормально. см. https://spring.io/guides/gs/rest-service/ и https://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/

person Essex Boy    schedule 29.03.2017
comment
Так что это будет работать для любого типа возвращаемого значения? Сложный объект POJO со строками/списками/картами? И не нужно использовать ObjectMapper ? Итак, когда мне нужно использовать ObjectMapper в методе контроллера? p.s. Эта ссылка также подтверждает то, что вы сказали: " title="spring mvc можно ли вернуть динамически преобразованный объект mapstring"> stackoverflow.com/questions/10284025/ - person Kumar Manish; 29.03.2017
comment
Очень-очень редко вам придется что-то делать, все, что вам нужно, это Джексон и @RestController. - person Essex Boy; 29.03.2017
comment
Итак, каков может быть вариант использования ObjectMapper и 'writeValueAsString' в @Controller? - person Kumar Manish; 29.03.2017
comment
Если в очень редком случае Джексон не может справиться с десериализацией, вам следует определить JsonDeserializer (см. stackoverflow.com/questions/35724693/) и назначьте его POJO, вы никогда не делаете это в Контроллер. Контроллер должен вернуть ResponseEntity. - person Essex Boy; 30.03.2017