4-3 Spring MVC框架-02

Spring MVC框架-02

Ⅰ.RESTful基础

  • 是一种设计风格和开发方式
1.get和post请求区别:
get post
获取请求 上传请求
请求参数在地址栏URL 请求参数在请求体里面
URL长度有限制;保密性不好 请求体长度没有限制;保密性好
利于数据分享 利于数据加密传输
传输效率快 传输效率比get慢一点
2.@PathVariable
  • URL中使用的占位符是{id},则方法的参数名称也应该是id,就可以直接匹配上
  • 结合正则表达式进行匹配 :
  • 多种不冲突的正则表达式是可以同时存在的
  • 优先精确匹配@GetMapping("/list/info.do")
@GetMapping("/{userId}/info.do")
public UserVO info(@PathVariable("userId") Long id) {
// ...
}

Ⅱ.响应正文的结果类型

1.<响应结果类型>JsonResult
  • 状态state 例如:2

  • 信息message 例如:"登录失败,用户名不存在"

  • 数据data

2.构造方法与静态方法
  • 处理重复冗余代码:

    • 通过调用构造方法:处理重复代码,外部new对象实现,但是不直观

    • 通过调用静态方法:处理重复代码,根据静态方法名(见名知意)实现功能--推荐

    • 方法重载的可以互相引用

3.Enum 枚举
  • 应用的前提是,它的值一定是相对有限的(
  • 只能在列举的枚举内部已有的值进行实现
  • 穷举所有可能有限的值
  • 里边的属性值就是类的一个对象
4.泛型
  • 不确定的类型可以用泛型
  • 声明泛型的步骤:
    • 属性值==>类=>静态方法,需要多加一个泛型(类加时就执行了,没有实例化类对象)
public class JsonResult<T> {
    //泛型对象
    private T data;
	//泛型静态方法
    public static <T> JsonResult<T> ok(T data){
        JsonResult<T> jsonResult = new JsonResult<>();
    }
    //非泛型静态方法<Void>
    public static JsonResult <Void> ok(){
        JsonResult<Void> jsonResult = new JsonResult<>();}
    
    //私有化构造方法,不允许外部随意创建JsonResult对象
    private JsonResult() {}
    
    ###泛型的使用,声明时的类型和使用时应该保持一致

Ⅲ.统一处理异常

1.异常
  1. 处理异常的本质并不能够让异常消失,而是避免下一次出同一样的错
  2. 控制器:处理异常=>目的(和客户端打交道,反馈给用户)
2.springmvc异常处理机制
注解:@ExceptionHandler
  • 访问权限:公有的

  • 返回值类型: 参考处理请求的方法的返回值类型

  • 方法名称:自定义

  • 参数列表:必须包含1个异常类型的参数,并且可按需添加HttpServletRequest、HttpServletResponse等少量特定的类型的参数,不可以随意添加参数

  • @ExceptionHandler public String handleException(NullPointerException e) { return "Error, NullPointerException!"; } 
    只能作用于当前控制器类中各个处理请求的方法,
    
注解:@RestControllerAdvice
  • 统一处理异常注解

  • 优先精准匹配异常方法,范围越小越优先

  • Spring MVC允许存在多个统一处理异常的方法,这些方法可以在不同的类中,只要处理的异常的类型不冲突即可(允许继承)

    • 例如:如果有2个或多个方法都处理NullPointerException,是错误的
    • 例如:如果同时存在2个方法,分别处理NullPointerException和RuntimeException,是允许的
  • 通常都会有handleThrowable()方法(方法名是自定义的),以避免某个异常没有被处理而导致500错误!– 此方法中应该输出异常的相关信息,甚至跟踪信息,否则,当程序运行此至处时,可能不便于观察、分析、记录出现异常

Ⅳ.拦截器(Interceptor)

  • 运行在所有控制器处理请求之前和之后的一种组件
  • 只要是若干种不同的请求过程中都需要执行同样的或高度相似的代码,都可以使用拦截器解决,典型的例如验证用户是否已经登录等等
1.配置
  • 拦截器类:实现接口 HandlerInterceptor 并重写其内的所有方法;
  • SpringMVC配置类:实现接口 WebMvcConfigurer 重写addInterceptors()方法;
posted @   Y_Zoran  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
-->
点击右上角即可分享
微信分享提示