rest spring

目录

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

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

  • @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时遇到的情况。

您可以在屏幕截图上看到,具有错误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

rest spring_Spring REST:异常处理卷。 1个相关推荐

  1. rest spring_Spring REST:异常处理卷。 2

    rest spring 这是有关使用Spring进行REST异常处理的系列的第二篇文章. 在我以前的文章中,我描述了如何在REST服务中组织最简单的异常处理. 这次,我将更进一步,并向您展示何时最好在 ...

  2. rest spring_Spring REST:异常处理卷。 3

    rest spring 这是该系列中有关Spring REST异常处理的最后一篇文章. 最后,这次我将讨论在表单处理期间可能发生的REST异常的处理. 因此,在本教程中,您将看到与REST,表单和异常 ...

  3. Spring REST:异常处理卷。 2

    这是有关使用Spring进行REST异常处理的系列的第二篇文章. 在我以前的文章中,我描述了如何在REST服务中组织最简单的异常处理. 这次,我将更进一步,我将向您展示何时最好在@Controller ...

  4. Spring REST:异常处理卷。 1个

    目录 Spring REST:异常处理卷. 1个 Spring REST:异常处理卷. 2 Spring REST:异常处理卷. 3 大家好,是时候继续在我的博客中发布新文章了. 因此,我很高兴地宣布 ...

  5. Spring REST:异常处理卷。 3

    这是该系列中有关Spring REST异常处理的最后一篇文章. 最后,这次我将讨论在表单处理期间可能发生的REST异常的处理. 因此,在本教程中,您将看到与REST,表单和异常处理有关的所有内容. 客 ...

  6. jsf集成spring_Spring和JSF集成:异常处理

    jsf集成spring 大多数JSF开发人员都会熟悉"发生错误"页面,当在他们的代码某处引发意外异常时,该页面就会显示. 该页面在开发时确实很有用,但对于生产应用程序通常不是您想要 ...

  7. Win32 结构化异常处理(SEH)探秘【下篇】

    图十三 UnHandledExceptionFilter 函数的伪代码 UnhandledExceptionFilter( STRUCT _EXCEPTION_POINTERS *pException ...

  8. Java异常处理总结

    Java异常处理总结           异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制 ...

  9. WCF技术剖析之二十一:WCF基本异常处理模式[中篇]

    通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultException异常),其相关的错误信息仅仅限于服务端可见,并不会被WC ...

最新文章

  1. 堆状态分析的利器——valgrind的DHAT
  2. 集中式管理助推服装企业腾飞
  3. 教你用树莓派打造一个家庭影院
  4. 使用vue来做局部刷新
  5. Sort HDU5884(二分+多叉哈夫曼树)
  6. kafka python教程_kafka python 指定分区消费
  7. Longhorn明年5月完成 微软将推7个版本
  8. linux脚本定时运行脚本,linux定时运行命令脚本——crontab
  9. Ubuntu下好的PDF阅读器介绍
  10. [转载]ASPNET MVC表格呈现利器:MvcContrib.UI.Grid
  11. [xsy2282]cake
  12. Silverlight 2应用程序中XAP文件揭秘
  13. 打开SVN server图形化管理界面
  14. 51/STC12单片机SCON,PCON,TMOD寄存器定义及功能
  15. 多功能下拉分页选择插件SelectPage插件 http://www.jq22.com/jquery-info14227
  16. MySQL的一级索引和二级索引介绍
  17. 实战一个项目后,谈谈 Rust 语言的优点和缺点
  18. Python制作微信小助手
  19. submit事件监听问题
  20. 【毕业设计】基于云平台的火灾报警器 - stm32 物联网 单片机 OneNET云平台

热门文章

  1. springboot整合spring @Cache和Redis
  2. eclipse搭建多module项目的坑
  3. Java IO: 并发IO
  4. Eclipse 内置浏览器
  5. Java对象内存结构
  6. java中,如何实现输入一个正整数,并将这个数字反转输出,比如输入123,输出321
  7. 新闻发布项目——接口类(newsTbDao)
  8. 复变函数画图cosz图像_用matlab绘制x=(1+cosu)cosv,y=(1+cosu)sinv,z=sinu图像?
  9. 如何显示服务器控件,Panel Web 服务器控件概述
  10. java安全——数字签名+代码签名