[第二章—Spring MVC的高级技术] 2.3 处理异常

这篇具有很好参考价值的文章主要介绍了[第二章—Spring MVC的高级技术] 2.3 处理异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

各位小猿,程序员小猿开发笔记,希望大家共同进步。
引言

异常处理方式:

我是谁——异常处理。 来自那——所有功能正常运行,但出现错误 怎么办——如何处理异常和响应客户端

异常转换响应:

[第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

[第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

@ResponseStatus注解

我是谁——Spring框架中的一个注解 用在哪——应用在控制器类或方法上 什么用——用于在控制器方法中指定HTTP响应的状态码。

指定状态码

指定一个特定的HTTP状态码,以便在方法成功执行后返回给客户端。 例如,如果您的方法成功处理了请求并返回了所需的结果,您可以使用@ResponseStatus(HttpStatus.OK)来指定成功的状态码为200。

指定可选的reason参数
除了状态码外,@ResponseStatus还可以指定一个可选的reason参数,用于提供关于响应状态的简要说明。这样做可以增加对API的可读性和理解性。

下面是一个示例: [第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程 在上面的示例中,当请求"/users/{id}"时,如果成功找到对应id的用户,将返回状态码为200的HTTP响应。 2. 异常转换为HTTP状态码: ● 最简单的异常处理方式是将异常映射到HTTP状态码,并包含在响应中。 ● 下面介绍如何将异常映射为HTTP状态码。

7.3.1 将异常映射为HTTP状态码

在默认情况下,Spring会将自身的一些异常自动转换为合适的状态 码。表7. 1列出了这些映射关系。 表7.1 Spri ng的一些异常会默认映射为HTTP状态码 Spring异常 HTTP状态码 [第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程 TypeMismatchException 400 - Bad Request

第一步:创建一个spittle方法

[第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

1. 检索Spittle对象:

○ 通过ID从SpittleRepository中检索Spittle对象。

○ 如果findOne()方法返回Spittle对象,则将其放入模型中,并由名为"spittle"的视图渲染到响应中。

○ 如果findOne()方法返回null,则抛出SpittleNotFoundException异常。

2. 异常处理:

○ 如果findOne()方法返回null,则抛出SpittleNotFoundException异常。

3. 后续处理:

○ SpittleNotFoundException异常需要进行处理,以便给客户端一个合适的响应。 现在就是一个简单的非检查型异常, 如下所示: [第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

  1. 处理请求并处理异常: ○ 如果调用spittle()方法处理请求,并且获取的结果为空,则会抛出SpittleNotFoundException异常。

    ○ 默认情况下,SpittleNotFoundException会导致500状态码的响应。

    ○ 可以通过映射SpittleNotFoundException来改变默认行为。

  2. 修改默认行为: ○ 当抛出SpittleNotFoundException异常时,表示请求的资源未找到。

    ○ HTTP状态码404是最准确的响应状态码。

    ○ 可以使用@ResponseStatus注解将SpittleNotFoundException映射为HTTP状态码404。 程序清单7.8 @ResponseStatus注解:将异常映射为特定的状态码 [第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

在引入@ResponseStatus注解之后,如果控制器方法抛出SpittleNotFound-Exception异常的话,响应将会具有404状态 码,这是因为Spittle Not Found。

7.3.2 编写异常处理的方法

程序清单7.9 在处理请求的方法中直接处理异常 [第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

程序清单7.9中并没有特别之处,它只是在Java中处理异常的基本样例。该方法可以有两个路径,每个路径会有不同的输出。 然而,saveSpittle()方法的复杂性让人感到困惑。

只关注正确的路径,异常交给其他方法处理

首先,让我们首先将saveSpittle()方法中的异常处理方法剥离掉: [第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程 可以看到,方法简单了许多。只关注正常保存Spittle的情况,所以只有一个执行路径,容易理解和测试。

处理抛出异常DuplicateSpittleException

[第二章—Spring MVC的高级技术]  2.3 处理异常,Java,Spring,Java编程

流程:

● 在handleDuplicateSpittle()方法上添加@ExceptionHandler注解 ● 返回一个String类型的值,指定要渲染的逻辑视图名

简化异常处理流程

● 通过提取代码创建handleDuplicateSpittle()方法 ● 不需要在每个可能抛出DuplicateSpittleException的方法中添加异常处理代码

@ExceptionHandler

注解的特点

● 可以处理同一个控制器中所有处理器方法抛出的异常

作用范围

标注的方法能够处理同一个控制器类中所有处理器方法的异常,那么你可能会问有没有一种方法能够处理所有控制器中处理器方法所抛出的异常呢。 控制器通知类的异常处理

从Spring 3.2开始,我们可以将异常处理定义到控制器通知类中,以处理所有控制器中处理器方法所抛出的异常。这种方式使得异常处理更加灵活和统一。

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-814769.html

到了这里,关于[第二章—Spring MVC的高级技术] 2.3 处理异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从浅入深了解.NET Core MVC 2.x全面教程【第二章】

    章节 第一章:https://www.cnblogs.com/kimiliucn/p/17611047.html 第二章:https://www.cnblogs.com/kimiliucn/p/17616708.html 1.诊断中间件 命名空间:Microsoft.AspNetCore.Diagnostics 报告信息并处理异常 2.诊断中间件 UseDeveloperExceptionPage:开发时使用的异常页面,异常信息 UseStatusCodePages:返回状态码:400-

    2024年02月13日
    浏览(54)
  • Windows高级调试(学习笔记)-第二章-调试器介绍

    2.1.1 Debugger Types调试器类型 User Mode Deduggers(用户态调试器) 实时调试(Living Debugging)、事后调试(Postmortem Debugging) 三个用户态调试器:cdb.exe、nstd.exe及windbg.exe Kernel Mode Debugger(内核态调试器) 可以分析计算机系统 二个内核态调试器:kd.exe及windbg.exe 2.1.2 Debugger Commands调试器命令 buil

    2024年01月18日
    浏览(68)
  • 第二章:CSS基础进阶-part1:CSS高级选择器

    后代选择器:E F 子元素选择器: EF 相邻兄弟选择器:E+F 群组选择器:多个选择器以逗号隔开(selector1,selector2,…) 属性选择器:E[attr],E[attr=“value”], E[attr~=“value”] CSS 属性选择器通过已经存在的属性名或属性值匹配元素 伪类选择器(简称:伪类)通过冒号来定义,它定义了

    2024年02月13日
    浏览(37)
  • 《Spring揭秘》-第二章- 学习记录

    IoC全称为Inversion of Control,中文翻译为控制反转,同时还有一个别名叫 依赖注入DI(Dependency Injection)。大多将IoC与DI看作同等概念,也有部分观点认为 依赖注入可以看作IoC的一种实现方式。 在没有Spring的时候,当我们需要依赖某个类或服务时,一般通过new创建一个对象(或者通

    2023年04月11日
    浏览(78)
  • 软考第二章 信息技术发展

    本章内容:软件硬件、网络、存储、新技术。 信息技术: 定义:获取、处理、传输和使用信息的应用技术。 包括:物联网、云计算、大数据、区块链、人工智能、虚拟现实。 2.1.1 计算机硬件 2.1.2 计算机网络 类型 网络标准协议:OSI协议。 7层协议:物联网叔会使用 IEEE 802协

    2024年02月13日
    浏览(42)
  • (SpringBoot)第二章:Spring创建和使用

    注意 :在Java中对象也叫做Bean,所以后续文章中用Be

    2024年02月08日
    浏览(44)
  • 第二章-Spring Boot Starter介绍和使用

            我们知道Spring Boot大大简化了项目初始搭建以及开发过程,而这些都是通过Spring Boot提供的starter来完成的。品达通用权限系统就是基于Spring Boot进行开发,而且一些基础模块其本质就是starter,所以我们需要对Spring Boot的starter有一个全面深入的了解,这是我们开发品

    2024年01月22日
    浏览(48)
  • ChatGPT技术原理 第二章:自然语言处理基础

    目录 2.1 语言模型 2.3 词嵌入 2.4 注意力机制 2.5 生成式模型

    2024年02月02日
    浏览(44)
  • UNIX网络编程卷一 学习笔记 第二十二章 高级UDP套接字编程

    TCP是一个字节流协议,又使用滑动窗口,因此没有记录边界或发送者数据发送能力超过接收者接收能力之类的事情,但对于UDP,每个输入操作对应一个UDP数据报(一个记录),因此当收取的数据报大于引用的输入缓冲区时就有问题。 UDP是不可靠协议,但有些应用确实有理由使

    2024年02月12日
    浏览(60)
  • 第二章 ARM 技术及体系结构【嵌入式系统】

    2023-7-3 14:28:36 以下内容源自《【嵌入式系统】》 仅供学习交流使用 2.1.1 ARM 体系的版本说明 2.1.2 ARM 内核的命名 2.1.3 常用 ARM 处理器系列介绍 ARM7 系列处理器包括 4 种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T 和 ARM7EJ,其中 ARM7TDMI 是目前应用最广泛的 32 位嵌入式 RISC 处理器,ARM7 系

    2024年02月12日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包