之前我们说过传统的 SpringMVC 的是有创建和渲染 View 的过程的,但是现在的开发基本上都是前后端分离的,后台也不再需要做 View 的工作了,只需要提供好数据给前端开发人员就行了。
使用 HTTP 信息转化器
使用 信息转化器 应该是最简单直接的方式了。传统的 Spring MVC 过程是创建 ModelAndView 然后把 Model 在 View 中进行渲染。最后才将结果返回。但是使用了 信息转化器就省去了这个过程,因为到这里就没有 View 和 Model 了,而是将 控制器的数据进行转化,然后就返回了。
1. 配置和依赖
Spring 自带了很多转化器,我们要使用的是 MappingJackson2HttpMessageConverter 这个转化器,虽然这个已经自动注册了,不用在 Spring 中进行配置,但是需要 Jackson JSON Processor 库来进行支持。
所以,首先,我们要添加 Jackson JSON Processor 的依赖。我们使用的是 Maven 进行依赖。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
虽然说 MappingJackson2HttpMessageConverter 是自动注册的,但是指的是我们配置好项目的基础上,其中跟这个相关的关键配置是 <mvc:annotation-driven />
这个配置会自动注册 DefaultAnnotationHandlerMapping 与 AnnotationMethodHandlerAdapter 两个 bean ,是 Spring MVC为 @Controllers 分发请求所必须的。
并提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)。
2. Controller 中使用注解
还有就是什么时候要返回 json ,生命时候返回 其他的View 呢?
我们需要在返回 json 的控制器方法上添加 @ResponseBody
注解,来告诉 Spring 跳过正常的处理流程,使用 转化器来处理数据。
如果需要一个控制器下的所有方法都返回 json ,可以使用 @RestController
来对控制器进行注解,这样就会使这个控制器下的所有方法都返回 json 。
补充: 要使接口能正常返回 json ,对返回对象有几点要求:
1. 要有一个无参数的构造器
2. 要输出的属性需要有 get/set 方法