I want to know what is the rule followed by MappingJackson2HttpMessageConverter to convert the object (returned from controller method annotated by @ResponseBody
) to a json? In some situations I see that just having Jackson2 on classpath (pom.xml) is enough and the controller simply returns back its object e.g. String or a collection e.g. List<Employee>
successfully to browser in json format. But, in other cases I have seen that the solution asks me to use an ObjectMapper
and use method writeValueAsString
to get a string and return that as a response, example HashMap
s! Are there some implicit rules which MappingJackson2HttpMessageConverter uses to decide if it is able to do the conversion on its own or I need to manually do it using Objectmapper
? If I have a pojo object, which internally has few String
fields, would I still need to use ObjectMapper etc? If not then would I need it if my pojo class has fields like , some List<CustomObject>
and some HashMap
s?
For example : example 1 does not use any ObjectMapper to convert List<Company>
to json in controller method. But, example 2 needs an ObjectMapper
and writeValueAsString
? plus, it's return type now is String
instead of a HashMap
!
Asked
Active
Viewed 544 times
1

Community
- 1
- 1

Kumar Manish
- 1,166
- 1
- 16
- 28
1 Answers
0
If you use @RestController and you have jackson in the class path everything will be handled OK. see https://spring.io/guides/gs/rest-service/ and https://www.leveluplunch.com/java/tutorials/014-post-json-to-spring-rest-webservice/

Essex Boy
- 7,565
- 2
- 21
- 24
-
So it would work for any kind of return type ? Complex POJO object with Strings/Lists/Maps? And no need to use `ObjectMapper` ? So when would I need to use an `ObjectMapper` in a controller method? p.s. This link also corroborates what you said, though: http://stackoverflow.com/questions/10284025/spring-mvc-is-it-possible-to-return-a-mapstring-object-dynamically-converted – Kumar Manish Mar 29 '17 at 13:57
-
Very very rarely will you have to do anything, Jackson and @RestController is all you need. – Essex Boy Mar 29 '17 at 14:13
-
So what could be a use case of using `ObjectMapper` & 'writeValueAsString' in a `@Controller` ? – Kumar Manish Mar 29 '17 at 16:21
-
If in the very rare case that Jackson can't handle the de-serialization, then you should define a JsonDeserializer (see http://stackoverflow.com/questions/35724693/jackson-deserialize-object-with-list-of-springs-interface/35726158#35726158) and assign it to the POJO, you never do it in the Controller. The Controller should return a ResponseEntity. – Essex Boy Mar 30 '17 at 06:58