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()方法;

4-3 Spring MVC框架-02的更多相关文章

  1. Spring MVC篇一、搭建Spring MVC框架

    本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij创建,配合maven管理.整体的目录结构如图: 其中ja ...

  2. Spring MVC 框架的架包分析,功能作用,优点

    由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关j ...

  3. 从零开始学 Java - 搭建 Spring MVC 框架

    没有什么比一个时代的没落更令人伤感的了 整个社会和人都在追求创新.进步.成长,没有人愿意停步不前,一个个老事物慢慢从我们生活中消失掉真的令人那么伤感么?或者说被取代?我想有些是的,但有些东西其实并不是 ...

  4. 【WEB】初探Spring MVC框架

    Spring MVC框架算是当下比较流行的Java开源框架.但实话实说,做了几年WEB项目,完全没有SpringMVC实战经验,乃至在某些交流场合下被同行严重鄙视“奥特曼”了.“心塞”的同时,只好默默 ...

  5. Spring mvc框架 controller间跳转 ,重定向 ,传参

     一.需求背景     1. 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示.   @Req ...

  6. spring mvc 框架搭建及详解

    现 在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不 ...

  7. Spring MVC框架搭建

    Spring MVC篇一.搭建Spring MVC框架 本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij ...

  8. Spring MVC框架下的第一个Hello World程序

    本程序是一个maven程序,使用maven方便管理jar包和程序,简化了操作步骤.本程序的目的是通过一个简单的程序,了解Spring MVC框架的基本工作流程,由简入繁的学习Spring MVC框架, ...

  9. spring MVC框架入门(外加SSM整合)

    spring MVC框架 一.什么是sping MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 W ...

随机推荐

  1. df-查看磁盘目录空间大小

    查看磁盘分区挂载情况. 语法 df [option] 选项 -T 显示文件系统类型. -h 带单位显示. 示例 [root@localhost ~]# df -Th Filesystem Type S ...

  2. js 定时器 Timer

    1 /* Timer 定时器 2 3 parameter: 4 func: Function; //定时器运行时的回调; 默认 null 5 speed: Number; //延迟多少毫秒执行一次 f ...

  3. 如何用 UDP 实现可靠传输?

    作者:小林coding 计算机八股文刷题网站:https://xiaolincoding.com 大家好,我是小林. 我记得之前在群里看到,有位读者字节一面的时候被问到:「如何基于 UDP 协议实现可 ...

  4. [杂项]从子域名接管到Subtaker

    子域名接管安全性分析及落地化 能说只是为了学Go嘛?33333 Github项目直通车 简介 子域名接管,主要原因归结于失效dns记录未删除. 譬如,一条指向test.sec.com的CNAME记录未 ...

  5. CVPR2022 | 重新审视池化:你的感受野不是最理想的

    前言 本文提出了一种简单而有效的动态优化池操作( Dynamically Optimized Pooling operation),称为DynOPool,它通过学习每一层感受野的最佳大小和形状来优化特 ...

  6. 我是一个Dubbo数据包...

    hello,大家好呀,我是小楼! 今天给大家带来一篇关于Dubbo IO交互的文章,本文是一位同事写的文章,用有趣的文字把枯燥的知识点写出来,通俗易懂,非常有意思,所以迫不及待找作者授权然后分享给大家 ...

  7. jupyter notebook修改默认浏览器

    1. anaconda集成了python以及各种库.python和anaconda可二选一. 2. anaconda或python安装后记得把pip源改为国内的镜像源地址.比如163,阿里,清华以及南 ...

  8. junit 5 - Display Name 展示名称

    本文地址:https://www.cnblogs.com/hchengmx/p/14883563.html @DisplayName可以给 测试类 或者 测试方法来自定义显示的名称.可以支持 空格.特 ...

  9. 工作流引擎之Elsa入门系列教程之一 初始化项目并创建第一个工作流

    引子 工作流(Workflow)是对工作流程及其各操作步骤之间业务规则的抽象.概括描述. 为了实现某个业务目标,需要多方参与.按预定规则提交数据时,就可以用到工作流. 通过流程引擎,我们按照流程图,编 ...

  10. 20.LVS负载均衡群集—NAT模式实例

    LVS负载均衡群集-NAT模式实例 目录 LVS负载均衡群集-NAT模式实例 群集引用概述 群集的含义 问题 解决方法 企业群集分类 群集的三种类型 负载均衡群集(Load Balance Clust ...