之前我们说过传统的 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 方法