使用基于@ResponseBody注释的MappingJackson2JsonView支持在Spring REST中返回JSON响应有什么好处?

时间:2016-01-29 20:07:23

标签: java json spring spring-mvc

我正在浏览此tutorial,发现我们可以使用MappingJackson2JsonView@ResponseBody注释的@ResponseBody支持在Spring REST中返回JSON响应。

显然使用MappingJackson2JsonView注释非常简单易用,而使用UIView支持位复杂。这是我个人的意见,但我想知道在Spring REST中使用MappingJackson2JsonView支持在@ResponseBody Annotation上返回JSON响应的优点是什么?如果有的话?有人可以解释一下他们之间哪个更好,为什么? 何时使用MappingJackson2JsonView支持以及何时使用@ResponseBody Annotation 在Spring REST中返回JSON响应?

2 个答案:

答案 0 :(得分:1)

我会说,即使实施起来有点困难,良好的实施也可以比@ResponseBody更灵活,更强大。 例如:

Jackson2ObjectMapperBuilder提供了一个很好的API来自定义各种Jackson设置,同时保留Spring Framework提供的默认设置。它还允许基于相同的配置创建ObjectMapperXmlMapper个实例。

Jackson2ObjectMapperBuilderJackson2ObjectMapperFactoryBean都定义了更好的Jackson默认配置。例如,DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES属性设置为false,以允许使用未映射的属性反序列化JSON对象。

但总的来说,它在某种程度上取决于自己的观点和经验。

答案 1 :(得分:1)

我认为,MappingJackson2JsonView是一个很好的实现。

但ResponseBody有一些优点。 在@ResponseBody的帮助下,您可以返回对象而不是属性 例如

class Student extends ResponseDTO{
   publci String name = "John"
}
...
@ResponseBody ResponseDTO  getStudentInfo(){
  return new Student();
}

结果将是     {       "名称":"约翰"     }

使用MappingJackson2JsonView,您必须返回属性中的对象,如

{
  "student": {
               "name":"John"
             }
}

使用@ResponseBody,您还可以使用内联对象扩展

返回结果
 @ResponseBody getStudentInfo(){
  return new Object(){
     public String name="John"
 };
}

但这不是好的实施

一些好的实现MappingJackson2JsonView很好。但是对于更多功能,如返回对象或返回ResponseDto,ResponseBody更有用