解决spring boot中rest接口404,500等错误返回统一的json格式
2017-04-13 16:00
1441 查看
在开发rest接口时,我们往往会定义统一的返回格式,列如:
{ "status": true, "code": 200, "message": null, "data": [ { "id": "101", "name": "jack" }, { "id": "102", "name": "jason" } ] }但是如果调用方请求我们的api时把接口地址写错了,就会得到一个404错误,在传统的web系统中我们可自定义404错误页面,展示更友好。在spring boot中其实也是返回了一个json格式的数据,如下:
{ "timestamp": 1492063521109, "status": 404, "error": "Not Found", "message": "No message available", "path": "/rest11/auth" }告诉我们哪个地址是没找到,其实也挺友好的,但是因为我们上面自定义的数据格式跟下面的不一致,当用户拿到这个返回的时候是无法识别的,其中最明显的是status字段。我们自定义的是boolean类型,表示是否成功这边返回的就是http的状态码所以我们需要在发生这种系统错误时也能返回我们自定义的那种格式定义一个异常处理类
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 系统异常处理,比如:404,500 * @param req * @param resp * @param e * @return * @throws Exception */ @ExceptionHandler(value = Exception.class) @ResponseBody public ResponseData defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception { logger.error("", e); ResponseData r = new ResponseData(); r.setMessage(e.getMessage()); if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) { r.setCode(404); } else { r.setCode(500); } r.setData(null); r.setStatus(false); return r; } }ResponseData是我们返回格式的实体类这种在发生错误时这边会捕获到,然后封装好返回格式,返回给调用方最后关键的一步是在spring boot的配置文件中加上如下配置:
#出现错误时, 直接抛出异常 spring.mvc.throw-exception-if-no-handler-found=true #不要为我们工程中的资源文件建立映射 spring.resources.add-mappings=false然后我们调用一个不存在的接口时,返回的错误信息就是我们自定义的那种格式了
{ "status": false, "code": 404, "message": "No handler found for GET /rest11/auth", "data": null }
相关文章推荐
- 解决spring boot中rest接口404,500等错误返回统一的json格式
- 异常解决篇:Spring Boot默认错误返回格式变成数组@RequestBody无法解析Json格式
- Spring MVC 全局异常处理-RESTAPI接口返回统一JSON格式-自定义异常处理--404异常捕捉
- SpringBoot RestController 同时支持返回xml和json格式数据
- spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500
- spring boot架构设计——权限验证及API接口统一返回格式
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理
- spring后台返回json数据 页面406错误 Not Acceptable解决
- Spring/SpringBoot定义统一异常错误码返回
- STS创建Spring Boot项目实战(Rest接口、数据库、用户认证、分布式Token JWT、Redis操作、日志和统一异常处理)
- 解决服务器返回错误数据格式导致Json解析出错造成app崩溃
- Spring Boot实战之全局异常捕获 实现参数异常检查返回统一错误信息
- Spring Boot 实现json和jsonp格式数据接口
- spring4.1 请求rest接口406问题解决(转换JSON)
- 利用Nginx负载均衡的访问SpringBoot服务,还有如何利用Nginx实现404,500等错误页面的拦截
- Spring boot 实现json和jsonp格式数据,接口共用
- STS创建Spring Boot项目实战(Rest接口、数据库、用户认证、分布式Token JWT、Redis操作、日志和统一异常处理)
- SpringBoot 提交Json格式数据报错及解决方法
- SpringBoot中实现拦截器, 并实现对404和500等错误的拦截。