Spring MVC REST Exception Handling Best Practices (part 1)
文章推荐了一种REST API发生错误时HTTP body的格式。
{
"status": 404,
"code": 40483,
"message": "Oops! It looks like that file does not exist.",
"developerMessage": "File resource for path /uploads/foobar.txt does not exist. Please wait 10 minutes until the upload batch completes before checking again.",
"moreInfo": "http://www.mycompany.com/errors/40483"
}
status
的值就是HTTP status code。
code
是应用程序内部的错误代码。
表示错误的HTTP status code最多只有几十种,不能再细分到底是哪段业务逻辑发生了错误;而code
的值空间是无限的。
同时code
也方便后续在代码中定位错误。
message
是code
的具体描述信息。它(可以)和code
一一对应。
同一code的message在不同的locale下可以是不同的值。翻译的信息可以放在json或者XML文件里。
developerMessage
和moreInfo
相比之下没有那么重要。
实现时,可以设计一个异常类,BusinessException(HttpStatus status, String code)
;
然后实现一个HandlerExceptionResolver。