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的更多相关文章

  1. Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...

  2. Spring MVC 实践 - Component

    Spring MVC 实践 标签 : Java与Web Converter Spring MVC的数据绑定并非没有任何限制, 有案例表明: Spring在如何正确绑定数据方面是杂乱无章的. 比如: S ...

  3. Erlang error handling

    Erlang error handling Contents Preface try-catch Process link Erlang-way error handling OTP supervis ...

  4. MySQL Error Handling in Stored Procedures 2

    Summary: this tutorial shows you how to use MySQL handler to handle exceptions or errors encountered ...

  5. 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 ...

  6. Error Handling

    Use Exceptions Rather Than Return Codes Back in the distant past there were many languages that didn ...

  7. Error Handling and Exception

    The default error handling in PHP is very simple.An error message with filename, line number and a m ...

  8. Spring+MyBatis实践—MyBatis数据库访问

    关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTempl ...

  9. Clean Code–Chapter 7 Error Handling

    Error handling is important, but if it obscures logic, it's wrong. Use Exceptions Rather Than Return ...

随机推荐

  1. android系统掉电保护

    /************************************************************************ * android系统掉电保护 * 说明: * An ...

  2. 快速查询Python脚本语法

    /********************************************************************* * 快速查询Python脚本语法 * 说明: * Char ...

  3. Windows 小技巧: 變更輸入法順序

    Windows XP 中還是有辦法變更輸入法順序的!!只不過,要動用到 Regedit.exe 這個程式. 執行 Regedit.exe至 HKEY_CURRENT_USER\Keyboard Lay ...

  4. 使用C#代码审批/转签K2 Blackpearl流程

    转:http://www.cnblogs.com/dannyli/archive/2011/08/02/2125302.html 以下是使用代码审批.转签k2 blackpearl流程,初探K2 Bl ...

  5. C#隐式运行CMD命令(隐藏命令窗口)

    原文 C#隐式运行CMD命令(隐藏命令窗口) 本文实现了C#隐式运行CMD命令的功能.下图是实例程序的主画面.在命令文本框输入DOS命令,点击"Run"按钮,在下面的文本框中输出运 ...

  6. [Everyday Mathematic]20150212 求 $(\cos x+2)(\sin x+1)$ 的最大值

    设 $$\bex t=\tan \frac{x}{2}, \eex$$ 则 $$\bex \cos x=\frac{1-t^2}{1+t^2},\quad \sin x=\frac{2t}{1+t^2 ...

  7. 打造万能的ListView GridView 适配器

    转载:http://blog.csdn.net/lmj623565791/article/details/38902805/ 通用的ViewHolder 首先分析下ViewHolder的作用,通过co ...

  8. 字节顺序重置及“#include <algorith.h>”相关的STL最重要的头文件提醒

    这两天在写一个程序,需要将二进制文件中的数据以指定结构读入内存,说明文档中有提到大端序和小端序(Big Endian or Little Endian) 的概念,就找了一下字节顺序重置的算法,在一篇名 ...

  9. 【LeetCode】168 & 171- Excel Sheet Column Title & Excel Sheet Column Number

    168 - Excel Sheet Column Title Given a positive integer, return its corresponding column title as ap ...

  10. Visual Studio 2010+Oracle 10g +NHibernate配置

    南京酷都面试,考官问:你知道NHibernate吗?瞬间我就急了:只听说过Hibernate,NHibernate是什么?还有其他问题也是不知道,所以后果就悲剧了. 自己做一个小系统,总是想如果数据量 ...