Spring REST实践之Error Handling
Error Responses
在REST API中,HTTP状态码有非常重要的作用。API开发者应该坚持为每一个请求返回一个正确合适的状态码,而且应该在响应body中包含有用的、细粒度的错误信息。这些细节都可以帮助API使用者更快的定位错误。一般在错误响应体中应该包含如下信息(当然可以根据具体情况定义):
timestamp:错误发生的时间(时间戳)
status:错误相对应的http状态码
error:http状态码相关的描述
exception:引起错误的类的详细路径信息
message:错误相关的更加详细的信息
path:引起异常的URI
Input Field Validation
每一个应用程序都应该关注输入域的合法性判断。Spring MVC提供了两种方式验证用户输入,第一种方式是实现org.springframework.validation.Validator接口,将validator注入到controller中,手动调用验证方法执行验证过程;第二种方式是应用JSR 303验证方式(能够在应用程序的任何层执行验证逻辑),JSR 303和JSP 349定义了Bean验证API的规范。利用这些API,用户直接标注相关属性即可,比如@NotNull和@Email标注,相关实现框架会在运行时执行相关限制。Hibernate Validator是JSR 303/349非常流行的实现框架。下面是一些相关验证注解:
NotNull:声明某个域不能为null
Null:声明某个域必须为null
Max:声明某个域必须为整数,而且要小于等于指定的值
Min:声明某个域必须为整数,而且要大于等于指定的值
Past:声明某个域必须为过去的日期
Future:声明某个域必须为未来的日期
Size:声明某个域必须在min和max指定的范围内,如果域是集合类型,那么限制集合的元素个数;如果域是String类型,那么限制字符串的长度
Pattern:声明某个域必须符合指定的正则表达式
Externalizing Error Messages
为了适应国际化/本地化要求,最好能够将错误信息存在外部文件中。要实现此目的,可在classpath下定义多个messages相关的属性文件,用MessageSource的实现类ResourceBundleMessageSource(需要配置它的basename属性为多个属性文件的路径和前缀)读取属性中相关信息,可以通过getMessage方法的第三个参数Locale选取不同语言的错误信息。
Improving RestExceptionHandler
如果要想自定义标准异常的输出,一个简单的方法是扩展Spring的
ResponseEntityExceptionHandler类(此类中包含了标准异常的处理器),并覆盖相应方法即可。
Spring REST实践之Error Handling的更多相关文章
- Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...
- Spring MVC 实践 - Component
Spring MVC 实践 标签 : Java与Web Converter Spring MVC的数据绑定并非没有任何限制, 有案例表明: Spring在如何正确绑定数据方面是杂乱无章的. 比如: S ...
- Erlang error handling
Erlang error handling Contents Preface try-catch Process link Erlang-way error handling OTP supervis ...
- MySQL Error Handling in Stored Procedures 2
Summary: this tutorial shows you how to use MySQL handler to handle exceptions or errors encountered ...
- setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
目录 . 应用场景 . Use Case Code Analysis . 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer Over ...
- Error Handling
Use Exceptions Rather Than Return Codes Back in the distant past there were many languages that didn ...
- Error Handling and Exception
The default error handling in PHP is very simple.An error message with filename, line number and a m ...
- Spring+MyBatis实践—MyBatis数据库访问
关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTempl ...
- Clean Code–Chapter 7 Error Handling
Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...
随机推荐
- swun 1766 我的悲剧不可能那么好数
解题思路: 一向提交特别慎重的我,这题竟然PE了5发左右,放了几天,再回来写,直接1A, 相当的自豪,而且是最优解题者.这题千万要注意,化繁为简,文章只包括大小 写字母和数字,还有空行. #inc ...
- 【英语】Bingo口语笔记(32) - 口语中的弱读
- 一起学CUDA(一)
前提是电脑的显卡支持CUDA,N卡一般是支持的,如果是A卡就没办法了.主要针对Windows环境,Linux和Mac也有相应的安装包.CUDA环境搭建:Step1:安装代码环境VS2010:Step2 ...
- LA 2995 Image Is Everything 立方体成像 World Final 2004
有一个 n * n * n 的立方体,其中一些单位立方体已经缺失(剩下部分不一定连通).每个单位立方体重 1 克,且被涂上单一的颜色(即 6 个面的一颜色相同).给出前.左.后.右.顶.底 6 个视图 ...
- StringUtils判断字符串是否为空的方法
public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 下面是 Stri ...
- HDFS命令行文件操作
Hadoop文件操作命令形式为 hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命 ...
- js浮点数运算需要注意的问题
最近在js运算浮点数时发现了一个问题.问题是这样的:js函数中处理两个浮点数的相加,为了防止出现0.1+0.2=0.30000000000000004的问题,两个数都先乘以10000后再相加,得到结果 ...
- DataTable反向模糊匹配查找语法
正向写法: string filter = "code like '%"+sheetname+"%'"; filter值为: code like '%表F.3_ ...
- windows7操作系统64位安装ArcSDE10.1和Oracle11g
安装环境如下: Oracle11g R2 64位服务端Oracle11g R2 32位客户端(管理员,第二项)ArcSDE10.1 for Oracle11g SDE数据库可由其它机器安装Arcata ...
- ubuntu 查看系统版本信息
查看cpu信息cat /proc/cpiinfo 查看ubuntu版本:cat /etc/issue 查看系统是32位还是64位方法1:#查看long的位数,返回32或64 getconf LONG_ ...