rest spring_Spring REST:异常处理卷。 1个

rest spring

目录

  • Spring REST:异常处理卷。 1个
  • Spring REST:异常处理卷。 2
  • Spring REST:异常处理卷。 3

大家好,是时候继续在我的博客中发布新文章了。 因此,我很高兴地宣布,我计划撰写一些技术性的系列文章。 在当前文章中,我将开始讨论Spring REST异常处理。 Spring向我们建议了REST异常处理的几种方法,但是我想将您的注意力集中在其中两种方法上: Spring异常处理

  • @Controller级别的@ExceptionHandler
  • @ControllerAdvice级别的@ExceptionHandler

所有代码示例都将使用我在先前有关REST服务的文章中使用的应用程序开发。 JQuery将在客户端提供与REST服务的交互。

因此,在简要介绍之后,我要进行总结。 我们将考虑REST异常处理程序的三个示例。 这三种情况中的每一种都将描述在任何项目中可能发生的某些实际情况的解决方案。 所有开发将在已经存在的应用程序之上进行。

制备

我想做的第一件事- 将 MessageSource 添加到应用程序中。 这不是很困难,我不想在此停止详细介绍,因为我已经在另一篇文章中解释了如何执行此操作。 MessageSource的目的是存储错误消息,如果抛出异常,我想返回给客户端。

因此,这是一个messages.properties文件:

error.bad.smartphone.id = Smartphone can't have id:

成功添加MessageSource之后,我们可以在@Controller级别继续进行异常处理。

异常处理

在这一段中,我想重点介绍可能发生异常的代码段。 让我们检查来自SmartphoneController的一些方法。

...@RequestMapping(value="/edit/{id}", method=RequestMethod.GET)public ModelAndView editSmartphonePage(@PathVariable int id) {ModelAndView mav = new ModelAndView("phones/edit-phone");Smartphone smartphone = smartphoneService.get(id);mav.addObject("sPhone", smartphone);return mav;}
...@RequestMapping(value="/edit/{id}", method=RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone editSmartphone(@PathVariable int id, @Valid @RequestBody Smartphone smartphone) {smartphone.setId(id);return smartphoneService.update(smartphone);}
...@RequestMapping(value="/delete/{id}", method=RequestMethod.DELETE, produces = MediaType.APPLICATION_JSON_VALUE,consumes = MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic Smartphone deleteSmartphone(@PathVariable int id) {return smartphoneService.delete(id);}
...

这三种方法具有一个共同的功能– @PathVariable int id 。 这种情况很重要,因为Spring文档说,如果不能将使用@PathVariable注释的方法参数强制转换为指定的类型(在我们的示例中为int),则它将作为String公开。 因此,它可能导致TypeMismatchException

为了解决这个问题,我将在@Controller级别使用@ExceptionHandler批注。 这种方法最适合这种情况。 我只需要在SmartphoneController中进行2处更改:

  • 添加MessageSource字段
  • 添加异常处理程序方法
...@Autowiredprivate MessageSource messageSource;
...@ExceptionHandler(TypeMismatchException.class)@ResponseStatus(value=HttpStatus.NOT_FOUND)@ResponseBodypublic ErrorInfo handleTypeMismatchException(HttpServletRequest req, TypeMismatchException ex) {Locale locale = LocaleContextHolder.getLocale();String errorMessage = messageSource.getMessage("error.bad.smartphone.id", null, locale);errorMessage += ex.getValue();String errorURL = req.getRequestURL().toString();return new ErrorInfo(errorURL, errorMessage);}
...

让我们考虑一下方法。 @ExceptionHandler批注具有参数– TypeMismatchException ,这意味着在发生异常时将触发该方法。 @ResponseStatus批注用于指定特定的响应状态代码。

您可能已经注意到该方法返回ErrorInfo。 这很容易,因为它是任何类型的错误的类,需要通知客户有关错误原因的信息。 因此,该类如下所示:

public class ErrorInfo {private String url;private String message;public ErrorInfo(String url, String message) {this.url = url;this.message = message;}//Getters and setters are omitted}

此类的使用为我们提供了两个主要优点:我们可以提供引起异常的URL,并且可以提供适当的错误消息。

现在,让我们尝试看看当我尝试访问某些ID不可接受的URL时遇到的情况。

Spring异常处理控制器

您可以在屏幕截图上看到,具有错误ID的URL已按照我在@Controller级别上指定的方式进行了处理。 在下一篇文章中,我将讨论一些可以放在@ControllerAdvice级别的异常。

参考: Spring REST:异常处理卷。 Fruzenshtein的笔记博客中来自JCG合作伙伴 Alexey Zvolinskiy的1 。

翻译自: https://www.javacodegeeks.com/2013/12/spring-rest-exception-handling-vol-1.html

rest spring

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英特尔服务器主板型号参数对照表,Intel主板芯片组参数速查表(201805版)

2018年5月6日更新注:以上主板频率是intel的规范,而实际工厂在制造的时候,可以让主板支持到更高的频率,这称为内存频率的OC支持。2016年底,intel200系列芯片组发布了,主要有:Z270、H270、B250三款…

schur补(schur complement)

1. schur补的定义及性质 2. schur补的应用 2.1 在矩阵方程求解中的应用 2. 概率论和统计学中的应用 https://blog.csdn.net/itnerd/article/details/83385817

oppo r17听筒测试软件,【OPPOR17评测】ColorOS变智能 OPPO R17堪称生活小秘书(全文)_OPPO R17(6GB RAM/全网通)_手机评测-中关村在线...

近两年来,手机的全面屏设计不是美人尖就是刘海屏,这两种设计虽然可以扩大屏占比,但是缺少设计的美感。这时候,OPPO R17终于为我们带来了即有较高的屏占比又优雅的全面屏设计——水滴屏,让摄像头向水滴一样“垂涎欲滴”…

别克gl8服务器返回数据为空,老司机教学:别克GL8商务车总线控制系统故障解决...

别克GL8(参数|图片)商务车原自动变速箱出现严重故障更换自动变速箱后,不能启动车辆。检查原因,接通电源后档位灯不亮,发动机故障灯亮,防盗指示灯亮,不能启动车辆。用别克车型诊断仪TECH2检查,发现访问不了通过串行数据总线连接传输的各个模块。 检测故障与解决:1、CLASS-2串行数…

导数与函数极值

http://wuli.wiki//online/DerMax.html

驻点、极值点、拐点间的区别和联系

一、极值点与驻点的“纠缠” 我们可以从以下三点去理解它们的区别与联系: 二、拐点和另两者的“牵扯” https://zhuanlan.zhihu.com/p/95782395

御龙在天手游怎么不显示服务器了,御龙在天手游进不去怎么办 闪退原因及解决办法...

御龙在天手游进不去怎么办?闪退原因及解决办法。御龙在天手游今天迎来了安卓平台的不删档不限号测试(游戏出现打不开的问题,下面就让小编为大家介绍一下出现这类问题的原因及解决办法吧!1.服务器问题游戏早上10点左右公布了下载的地址&#x…

矩阵乘法和向量乘法

1. 矩阵乘法 2.向量乘法 https://zhuanlan.zhihu.com/p/79760117

怪物猎人服务器维护时间,怪物猎人云服务器

怪物猎人云服务器 内容精选换一换云耀云服务器适用于对CPU、内存、硬盘空间和带宽无特殊要求,服务一般只需要部署在一台或少量的服务器上,一次投入成本少,后期维护成本低的场景。例如网站开发,Web应用。推荐使用云耀云服务器&…

Vaadin Flow –奇妙的鹿

您可能知道,Vaadin是Java上最受欢迎的Web框架之一: https://zeroturnaround.com/rebellabs/java-web-frameworks-index-by-rebellabs/ https://javapipe.com/hosting/blog/best-java-web-frameworks/ 最近发布了该Web UI开发框架的新版本– Vaadin 10…

转置与变换(Transposes and Permutation)

1. 转置(Transposes) 2. Inner Product 3. 对称(symmetric) 4. RTRR^TRRTR 5. Permutation 6.PALU 7. Conclusion 总结一下就是转置和对称的相互关系,以及其一些特性,矩阵中元素的位置变换成为了本文重点。 https://face2ai.com/math-linear-algebra-c…

排名前20位的在线编程课程,可促进您的职业发展

您是否想知道用时间和金钱可以进行的最佳投资是什么? 知识 作为软件开发人员,您应该不断学习新技能。 这是发展您的职业并享受奖励(金钱,情感等)的最佳方法。 朝着这个方向前进,您应该阅读书籍&#xff…

线性代数

一、线性方程组 三、矩阵、向量中元素的符号 四、矩阵中行向量、列向量 五、行向量 列向量 (向量内积) 六、列向量 行向量(向量外积) 七、矩阵 列向量 (按行写矩阵) 八、矩阵 列向量 (按列写矩阵) 九、行向量 矩阵 (矩阵按列写) 十、行向量 矩阵 &…

矩阵导数

-************************************************** https://wenku.baidu.com/view/f7fa307a580216fc700afdb9.html#

HTTP缓存与Spring示例

缓存是HTTP协议的强大功能,但由于某些原因,它主要用于静态资源,例如图像,CSS样式表或JavaScript文件。 但是,HTTP缓存不仅限于应用程序的资产,您还可以将其用于动态计算的资源。 只需少量工作,…

三层网络结构理解

1. 三层网络结构(核心层 汇聚层 接入层) 三层网络结构是采用层次化架构的三层网络。三层网络架构采用层次化模型设计,即将复杂的网络设计分成几个层次,每个层次着重于某些特定的功能,这样就能够使一个复杂的大问题变成…

卫星系统采用的轨道类型

倾斜圆轨道星座 用于卫星网络的星座设计 1. Walker star(极轨道星座)卫星网络 2. Walker delta(倾斜星座)卫星网络 3. Ballard的玫瑰(Rosette)星座 等效于Walker的Delta星座 http://www.jos.org.cn/html/2014/5/4581.htm#outline_anchor_17

浅谈排队论

排队论起源于 1909 年丹麦电话工程师 A. K.爱尔朗的工作,他对电话通话拥挤问 题进行了研究。1917 年,爱尔朗发表了他的著名的文章—“自动电话交换中的概率理 论的几个问题的解决”。排队论已广泛应用于解决军事、运输、维修、生产、服务、库…

Java 8 Stream API示例

您好朋友,在本文中,我们将讨论Java 8 Stream API示例。 因此,我们要做的是,创建一个Player类,创建Player类的多个对象,然后创建一个测试类,在其中使用Stream API检索播放器的数据。 第一个例子…

概率密度函数、概率分布函数、常见概率分布

1. 概率函数 概率函数,就是用函数的形式来表达概率。 piP(Xai)(i1,2,3,4,5,6)p_iP(Xa_i)(i1,2,3,4,5,6)pi​P(Xai​)(i1,2,3,4,5,6) 在这个函数里,自变量(X)是随机变量的取值,因变量(pip_ipi​&#xff09…