我们知道Spring MVC执行流程,浏览器发送请求到前端控制器,前端控制器收到请求调用后端控制器映射器,后端控制器映射器找到具体后端控制器,生成后端控制器对象返回给前端控制器,前端控制器调用后端控制器适配器,后端控制器适配器经过适配调用具体后端控制器,后端控制器收到请求,经过model、service、dao层处理返回处理结果,回到后端控制器将处理结果装进ModelAndView,前端控制器将ModelAndView传给视图解析器,视图解析器解析后返回具体视图。后端控制器就是我们这里所说的Controller。
先来看看Rest风格Controller与非Rest风格Controller代码结构上的区别。
Rest风格Controller代码结构如下:
@RestController声明这是一个Rest风格控制器。控制器方法参数没有用注解声明,它传过来的参数是一个JSON字符串,可以映射到模型对象,也可以是int类型和String类型。Map result声明了一个Map集合对象,我们返回的处理结果将会装进这个Map集合对象,return返回的是这个Map集合对象。
非Rest风格Controller代码结构如下:
@Controller声明这是一个非Rest风格控制器。控制器方法参数@RequestParam用于将请求参数区域的数据映射到控制层方法的参数上,@ModelAttribute将接收到参数绑定到模型对象上,@RequestBody接收的是一个JSON字符串数据,无论控制器方法参数其他参数是什么形式有一个共同点是必须从前端接收了一个Model类型的对象,我们返回的处理结果将会装进这个Model对象,这个对象将会返回给视图解析器,return返回的是一个视图名称,这就是ModelAndView。
只有数据集合往来的控制器用restful,需要返回视图的控制器用非restful。REST——表现层状态转移。
资源也就是信息,信息是数据的集合,它有很多外在的表现形式,独立的数据是没有意义,只有关联在一起才能够构成信息。一个人就相当于一个数据库,这个人的人脸、人脉信息就相当于这个数据库里的表,这个人的五官、李萌萌张嘻嘻田蜜蜜分别是这个人的人脸和人脉的记录。人脸:嘴唇——娇小、圆润、水润、血红,鼻子——娇小、圆润,耳朵娇小、圆润、水润、白里透粉,眼睛——卡姿兰大眼睛、灵动,脸型椭圆、端正、没有赘肉;人脉:李萌萌——资深社会研究专家,张嘻嘻——红色长方体方块物移动研究专家,田蜜蜜——专注人类粮食研究二十余年。填充记录的就是数据。
状态转移也就是新增、删除、更新、获取信息这些动作。对我们有用的数据我们拿过来,精致的脸蛋我们拿过来、那个社会研究专家能够造成社会震荡好像很厉害的样子我们拿过来,表现层配上有底蕴的灵魂。这个人传达给我们的信息是脸蛋精致、人脉优质,我们得到的信息是数据的集合,这个人只是一幅躯壳。
那么,如何保证接口安全呢。避免外部资源随便在你的脸上划上一刀。留下问题我们下期讨论。