解决spring boot中rest接口404 500等错误返回统一的json格式
2019-01-14 09:33
911 查看
在开发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;@ControllerAdvicepublic 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}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
相关文章推荐
- 解决spring boot中rest接口404,500等错误返回统一的json格式
- 解决spring boot中rest接口404,500等错误返回统一的json格式
- 异常解决篇:Spring Boot默认错误返回格式变成数组@RequestBody无法解析Json格式
- SpringBoot RestController 同时支持返回xml和json格式数据
- spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500
- Springboot使用FastJson后,接口返回中文乱码的问题解决。
- spring boot架构设计——权限验证及API接口统一返回格式
- Spring MVC 全局异常处理-RESTAPI接口返回统一JSON格式-自定义异常处理--404异常捕捉
- SpringMVC 用JackJson做接口返回JSON格式指定的字段解决方法
- 解决centos7 下 spring boot security 登陆接口请求 pending很久才返回结果
- springboot 返回json格式数据时间格式配置
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
- dojo接收spring返回json对象错误解决
- Spring MVC Rest服务 返回json报406错误的解决办法
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十二)返回JSON格式
- 解决Springboot使用FastJson 返回中文乱码的问题
- SpringMVC 用JackJson做接口返回JSON格式指定的字段解决方法
- spring后台返回json数据 页面406错误 Not Acceptable解决
- Spring boot 实现json和jsonp格式数据,接口共用
- 解决:sprng boot 项目在IDEA中spring-boot run正常运行,但是打成JAR包之后访问界面返回404