前言
对于用java来写的Controller层的代码并不能被Tomcat识别,但是Tomcat能够识别Servlet,因为Tomcat我们也称为Servlet容器,对应SpringBoot来说,它在底层给我们提供了一个非常核心的Servlet程序,叫做DispatcherServlet,继承了Servlet,所以可以被Tomcat识别,所以前端发送的请求会先经过DispatcherServlet,然后由DispatcherServlet将请求转给Controller层的程序,Controller层将请求处理完以后再返回给DispatcherServlet,DispatcherServlet再给浏览器响应数据
我们可以发现,DispatcherServlet在web请求中是一个非常核心的一个类,这个类在SpringBoot当中我们称为核心控制器或者前端控制器
请求响应
请求(HttpServletRequest):获取请求数据
响应(HttpServletResponse):设置响应数据
这也叫BS架构:Browser/Server,浏览器/服务器架构模式.客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。(维护方便 体验一般)
另外一种架构叫CS架构:Client/Server,客户端/服务器架构模式(开发、维护麻烦,体验不错)
请求参数
简单参数
原始方法
在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取
SpringBoot方式
参数名与形参变量名相同,定义形参即可接收参数
假如请求参数不一致
为null
如果方法形参名称与请求参数名称不匹配,可以使用注解@RequestParam完成映射
注意事项:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false.
实体参数
简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可
当前端传递的参数较多时,我们可以将传递来的参数封装到一个实体类当中
先创建一个实体类
复杂实体对象:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
数组集合参数
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数
集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系
日期参数
日期参数:使用@DateTimeFormat注解完成日期参数格式转换
Json参数
JSON参数:JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识
路径参数
路径参数:通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数
多个路径参数
响应数据
@ResponseBody
类型:方法注解、类注解
位置:Controller方法上/类上
作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应
说明:@RestController = @Controller + @ResponseBody
统一响应结果
为了方便维护以及管理,对返回的数据进行统一
@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