前言

对于用java来写的Controller层的代码并不能Tomcat识别,但是Tomcat能够识别Servlet,因为Tomcat我们也称为Servlet容器,对应SpringBoot来说,它在底层给我们提供了一个非常核心的Servlet程序,叫做DispatcherServlet,继承了Servlet,所以可以被Tomcat识别,所以前端发送的请求会先经过DispatcherServlet,然后由DispatcherServlet将请求转给Controller层的程序,Controller层将请求处理完以后再返回给DispatcherServlet,DispatcherServlet再给浏览器响应数据

接收前端传递的各种参数(以及响应数据)_数组

接收前端传递的各种参数(以及响应数据)_数据_02

我们可以发现,DispatcherServlet在web请求中是一个非常核心的一个类,这个类在SpringBoot当中我们称为核心控制器或者前端控制器

请求响应

请求(HttpServletRequest):获取请求数据

响应(HttpServletResponse):设置响应数据

接收前端传递的各种参数(以及响应数据)_数组_03

这也叫BS架构:Browser/Server,浏览器/服务器架构模式.客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。(维护方便 体验一般)

另外一种架构叫CS架构:Client/Server,客户端/服务器架构模式(开发、维护麻烦,体验不错)

请求参数

简单参数

原始方法

在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取

接收前端传递的各种参数(以及响应数据)_数据_04

SpringBoot方式

参数名与形参变量名相同,定义形参即可接收参数接收前端传递的各种参数(以及响应数据)_数据_05

假如请求参数不一致接收前端传递的各种参数(以及响应数据)_数据_06

接收前端传递的各种参数(以及响应数据)_数据_07

接收前端传递的各种参数(以及响应数据)_请求参数_08

为null

如果方法形参名称与请求参数名称不匹配,可以使用注解@RequestParam完成映射

接收前端传递的各种参数(以及响应数据)_数组_09

注意事项:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false.

接收前端传递的各种参数(以及响应数据)_请求参数_10

实体参数

简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可

当前端传递的参数较多时,我们可以将传递来的参数封装到一个实体类当中

先创建一个实体类

接收前端传递的各种参数(以及响应数据)_数组_11

接收前端传递的各种参数(以及响应数据)_请求参数_12

复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

接收前端传递的各种参数(以及响应数据)_数据_13

数组集合参数

数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

接收前端传递的各种参数(以及响应数据)_数据_14

集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系

接收前端传递的各种参数(以及响应数据)_数组_15

日期参数

日期参数:使用@DateTimeFormat注解完成日期参数格式转换

接收前端传递的各种参数(以及响应数据)_数组_16

Json参数

JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

接收前端传递的各种参数(以及响应数据)_请求参数_17

路径参数

路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数

接收前端传递的各种参数(以及响应数据)_数据_18

多个路径参数

接收前端传递的各种参数(以及响应数据)_请求参数_19

响应数据

接收前端传递的各种参数(以及响应数据)_数据_20

@ResponseBody

类型:方法注解、类注解

位置:Controller方法上/类上

作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应

说明:@RestController = @Controller + @ResponseBody

统一响应结果

为了方便维护以及管理,对返回的数据进行统一

接收前端传递的各种参数(以及响应数据)_数组_21

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;//响应码,1 代表成功; 0 代表失败
    private String msg;  //响应信息 描述字符串
    private Object data; //返回的数据

    //增删改 成功响应
    public static Result success(){
        return new Result(1,"success",null);
    }
    //查询 成功响应
    public static Result success(Object data){
        return new Result(1,"success",data);
    }
    //失败响应
    public static Result error(String msg){
        return new Result(0,msg,null);
    }
}


总结

简单参数

定义方法形参,请求参数名与形参变量名一致,如果不一致,通过@RequestParam手动映射

实体参数

请求参数名,与实体对象的属性名一致,会自动接收封装

数组集合参数

数组:请求参数名与数组名一致,直接封装

集合:请求参数名与集合名一致,@RequestParam绑定关系

日期参数

@DateTimeFormat

JSON参数

@RequestBody

路径参数

@PathVariable