3.16 @RestController注解

3.16 @RestController注解

用途

org.springframework.web.bind.annotation.RestController注解本身使用@Controller@ResponseBody注解。使用了@RestController注解的类会被看作一个Controller,并且该类中所有使用@RequestMapping注解的方法都默认使用了@ResponseBody注解。

源码

@RestController注解的源代码如下:

1
2
3
4
5
6
7
8
9
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController
@AliasFor(annotation=Controller.class)
String value() default "";
}

示例 @RestController注解的使用

创建一个RestControllerTest项目,所有文件和配置基本和3.14节的ResponseBodyTest项目一致。

项目结构

展开/折叠
G:\Desktop\随书源码\Spring+Mybatis企业应用实战(第2版)\codes\03\RestControllerTest
├─src\
│ └─org\
│   └─fkit\
│     ├─controller\
│     │ └─BookController.java
│     └─domain\
│       └─Book.java
└─WebContent\
  ├─index.jsp
  ├─js\
  │ ├─jquery-1.11.0.min.js
  │ ├─jquery-migrate-1.2.1.min.js
  │ └─json2.js
  ├─META-INF\
  │ └─MANIFEST.MF
  └─WEB-INF\
    ├─lib\
    │ ├─commons-logging-1.2.jar
    │ ├─jackson-annotations-2.9.2.jar
    │ ├─jackson-core-2.9.2.jar
    │ ├─jackson-databind-2.9.2.jar
    │ ├─spring-aop-5.0.1.RELEASE.jar
    │ ├─spring-aspects-5.0.1.RELEASE.jar
    │ ├─spring-beans-5.0.1.RELEASE.jar
    │ ├─spring-context-5.0.1.RELEASE.jar
    │ ├─spring-context-indexer-5.0.1.RELEASE.jar
    │ ├─spring-context-support-5.0.1.RELEASE.jar
    │ ├─spring-core-5.0.1.RELEASE.jar
    │ ├─spring-expression-5.0.1.RELEASE.jar
    │ ├─spring-instrument-5.0.1.RELEASE.jar
    │ ├─spring-jcl-5.0.1.RELEASE.jar
    │ ├─spring-jdbc-5.0.1.RELEASE.jar
    │ ├─spring-jms-5.0.1.RELEASE.jar
    │ ├─spring-messaging-5.0.1.RELEASE.jar
    │ ├─spring-orm-5.0.1.RELEASE.jar
    │ ├─spring-oxm-5.0.1.RELEASE.jar
    │ ├─spring-test-5.0.1.RELEASE.jar
    │ ├─spring-tx-5.0.1.RELEASE.jar
    │ ├─spring-web-5.0.1.RELEASE.jar
    │ ├─spring-webflux-5.0.1.RELEASE.jar
    │ ├─spring-webmvc-5.0.1.RELEASE.jar
    │ └─spring-websocket-5.0.1.RELEASE.jar
    ├─springmvc-config.xml
    └─web.xml

BookController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package org.fkit.controller;

import java.util.ArrayList;
import java.util.List;
import org.fkit.domain.Book;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// 该类会被看成一个Controller
@RestController
@RequestMapping("/json")
public class BookController
{
// 同时该类中所有使用@RequestMapping注解的方法都默认使用了@ResponseBody注解,
// 所以getJson方法会将List集合数据转换成JSON格式并返回客户端。
@RequestMapping(value = "/testRequestBody")
public Object getJson()
{
List<Book> list = new ArrayList<Book>();
list.add(new Book(1, "书名称1", "书的作者1"));
list.add(new Book(2, "书的名称2", "书的作者2"));
return list;
}
}

BookController使用了@RestController注解,该类会被看成一个Controller,同时该类中所有使用@RequestMapping注解的方法都默认使用了@ResponseBody注解, getJson方法会将List集合数据转换成JOSN格式并返回客户端.
测试结果和ResponseBodyTest项目的测试结果一致,此处不再赘述。