第九节 后台完善
控制器
上一节中,我们写了一段这样的代码,下面,我们深度学习一下SpringMVC控制器。
package com.mengyunzhi.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// RestController注解:声明一个控制器
@RestController
public class HelloWorld {
// RequestMapping注解:将/helloWorld映射到say方法上。
@RequestMapping("/helloWorld")
public String say() {
return "hello world api";
}
}
在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,即:DispatcherServlet起到了路由的作用。
我们不需要知道DispatcherServlet到底是什么,只需要知道它能够通过用户输入的URL来自动执行某个控制器中的某个触发器就可以了。
在ThinkPHP中,也内置了这样的功能,我们把ThinkPHP中的内置的默认路由功能简称为MCA
定义一个控制器非常简单,我们不需要做任务的继承操作(ThinkPHP是通过继承think\Controller来实现的),而是只需要在需要声明为控制器的类上添加@RestController注解即可。
@RestController
public class HelloWorld {
...
}
这里的@RequestMapping是用来构建请求路径与方法(和ThinkPHP一样,我们常把可以被路径触发到的方法称为触发器)之间的映射的。@RequestMapping将/helloWorld这个路径映射到say方法这个触发器上。有了@RequestMapping这个注解,当用户的路径输入/helloWorld便会触发say方法。
@RequestMapping("/helloWorld")
public String say() {
return "hello world api";
}
如果用官方点的语言来描述,则是:项目启动后,当用户对127.0.0.1:8080/helloWorld发起请求时,SpringMVC框架的DispatcherServlet就会截获这个请求,然后把这个请求交给对应的触发器去处理。
数据类型
我们来理一下前台请求后台的流程。
前台$http发送请求->控制器处理请求->返回数据->前台使用
返回数据时,我们就需要思考,前台想获取的是什么格式的数据呢?我们试一下。

我们看到,如果我们直接将我们的字符串"hello world api"返回给前台,会报错,提示信息为Data must be a valid JSON object(数据必须是一个有效的Json对象)。
JSON(JavaScript Object Notation)是一种由道格拉斯·克罗克福特构想设计、轻量级的数据交换语言,以文字为基础,且易于让人阅读。来自Json-维基百科。
如果你想深度学习一下Json的话,可以看看这篇Json教程。
所以要返回给前台Hello World,我们后台不能仅仅返回一个字符串,前台需要的是Json对象。
方法修改
所谓Json对象,即按特殊格式组成的一串字符串。既然前台需要,那我们就返回一个Json对象,对方法进行如下修改。
package com.mengyunzhi.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// RestController注解:声明一个控制器
@RestController
public class HelloWorld {
// RequestMapping注解:将/helloWorld映射到say方法上。
@RequestMapping("/helloWorld")
public SayHello say() {
// 新建一个SayHello类的对象sayHello
SayHello sayHello = new SayHello();
// 调用sayHello的setValue方法,设置value为"hello world api"
sayHello.setValue("hello world api");
// 返回sayHello对象
return sayHello;
}
// 定义一个静态内部类SayHello
public static class SayHello {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
我们在控制器中定义了一个静态内部类,say方法中新建SayHello对象,设置value,返回该对象。
有人可能会有疑问了,我们这里返回的可以是任意一个类的对象,前台需要的是Json格式的对象啊?那么SpringMVC返回给前台的到底是什么,我们来试一下。

运行项目,com.mengyunzhi.Application : Started Application。
打开浏览器,输入http://127.0.0.1:8080/helloWorld,我们看到返回的就是一个Json对象!

@RestController负责将SayHello对象转换为我们想要的Json格式。
在下一节中,让我们共同学习前台如何获取返回的Json对象,并将hello world api显示在前台。