SpringMVC作为Java EE项目表述层首选开发,对用户的请求做整体处理调度
主要作用:控制层 controller 配置
简化前端请求参数接收(用形参列表)
简化数据响应(用返回值)
围绕前端控制器模式设计的,其中中央 Servlet 和 DispatcherServlet 做整体请求处理调度!
SpringMVC涉及组件理解:
流程:1.配置类 2.加载类 3.controller
@RequestMapping (细化:@Getmapping,@PostMapping,@PutMapping,@Deletemapping…)
path路径参数 : @RequestMapping(“/{key}/”) + handler(@PathVariable Xx x)
param参数 :@RequestParam
json参数 :@RequestBody
导入jackson依赖 + @EnableWebMvc(json转换器)
@RequestHeader
handler方法中加@CookieValue
原生对象
视图解析器,设置前缀和后缀
redirect 和 forward
导入jackson依赖 + @EnableWebMvc(json转换器) + @ResponseBody
开启静态资源
// 开启静态资源查找
// dispathcherServlet -> handlerMapping找有没有对应的handler,若没有->找有没有静态资源
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
客户端发起请求request 给后端某个功能模块, 对 路径、参数、请求方式的设计。
功能模块需要:
4.1设计路径:/user/add
模块名
4.2设计参数传递 :
4.2.0 查询 GET | 保存 POST | 删除 DELETE | 更新 PUT
4.2.1 **没有请求体:**GET获取/查询、DELETE删除
path (路径传参):单一数据资源
参数是id标识 使用路径传递参数,例如:根据id删除或1查询数据 -> /模块/id (emp/1)
param :多、集合数据资源
参数不是id,是范围参数 param key=value
4.2.2 **有请求体:**POST保存、PUT修改
json :有请求体,使用请求体传递json
4.3选择请求方式 : get / post
5.1 全局异常处理
aop思想,定义异常类@ControllerAdvice,声明异常处理方法@ExceptionHandler(异常类.class)
5.2 拦截器
springmvc 内部过滤器
定义拦截类 handler之前preHandle , handler之后postHandle, 最后 afterCompletion
config 添加拦截器
// 拦截器
public void addInterceptors(InterceptorRegistry registry) {
// 拦截全部handler请求
//registry.addInterceptor(new MyInterceptor());
}
5.3 参数校验注解
JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架。
步骤:1.实体属性类添加校验注解
@RestController
@RequestMapping("user")
@Validated
public class UserController {
/**todo:接收用户数据,用户有校验注解
* 步骤:1.实体属性类添加校验注解
* 2.handler(@Validated 实体类 对象)
* @Validated 校验注解生效
* 注:param / json 校验注解都有效果
* param - @Validated
* json - @RequestBody
* -
* 问题:如果不符合校验规则,直接向前端抛出异常
* 解决:接收错误绑定信息,自定义返回结果,例如:参数错误 -> 返回{code:400} -> 到前端
* 捕捉错误信息:
* 1.handler方法中(校验对象,BindingResult result) 注:要求BindingResult必须紧挨着校验对象
* 2.BindingResult获取绑定错误信息
*/
@PostMapping(value = "register")
public Object register(@Validated @RequestBody User user, BindingResult result){
// 当有注解错误时,不直接返回异常,自定义异常信息
if (result.hasErrors()) {
Map data = new HashMap();
data.put("code",400);
data.put("msg","参数校验异常");
return data;
}
}
}