基于 Spring Boot:2.3.8.RELEASE 构建
by:林同学(765371578@qq.com)
引入依赖:
<dependency> <groupId>com.github.LinYuanBaoBao</groupId> <artifactId>payload-spring-boot-starter</artifactId> <version>1.0.2-RELEASE</version></dependency>Controller 上使用 @Payload 注解,自动对返回的数据进行包装。
@Payload@RequestMapping("/users")@RestControllerpublic class MyController { @GetMapping("/{id}") public User get(@PathVariable Integer id) { return user; }}响应结果格式如下:
{ "code": 200, "data": { "k1": "v1", "k2": "v2" }, "success": true, "message": "success", "timestamp": 1623055152059}见配置文件中 spring.mvc.payload 属性的自动提示
spring: mvc: payload: code: 200 # 成功状态码,默认:200 error-enabled: false # 统一错误处理 enable-trace: false # 打印堆栈信息 payload-map: code: code success: success message: message data: data timestamp: timestamp stack: stack path: path ding-ding-robot-config: enable: false # 是否启用钉钉告警机器人 webhook: https://... secret: SEC...对于业务异常,建议继承 RuntimeException 类,并加上 @BizErrorResponseStatus 注解。 该注解还支持配置
status 属性定义 http-status 状态码,与 code 属性定义响应的 code 错误码。
@BizErrorResponseStatus(code = 400,status = HttpStatus.BAD_REQUEST)public class CustomerException extends RuntimeException { public CustomerException(String message){ super(message); }}当抛出上面异常时,HTTP 响应报文 http-status 状态码为 400,内容如下:
{ "success": false, "message": "message", "code": 400, "timestamp": 1623055152059, "path": "/app"}抛出异常时,默认 message 信息为异常描述信息,你也可以自定义异常信息的获取方式,如:
@Beanpublic ErrorDeal errorDeal() { return new ErrorDeal() { @Override public Boolean isDealAttributes(WebRequest webRequest, ErrorAttributeOptions options) { return true; } @Override public String getErrorMessage(Map<String, Object> resultAttributes, Throwable error) { String errorMsg = resultAttributes.get("error").toString(); if (error instanceof MethodArgumentNotValidException) { return getMessage(((MethodArgumentNotValidException) error).getBindingResult().getAllErrors()); } else if (error instanceof BindException) { return getMessage(((BindException) error).getAllErrors()); } else if (error instanceof ConversionFailedException) { return error.getCause().getMessage(); } return StringUtils.isEmpty(error.getMessage()) ? errorMsg : error.getMessage(); } };}若启用了钉钉机器人告警,当异常(未使用 @BizErrorResponseStatus 注解)产生的响应 http-status 状态码 >= 500
时,会触发告警,内容如下:
服务名称:${spring.application.name}报错日期:2021-06-09 18:16:07接口:/xx类路径:com.example.demo.controller.TestController异常方法:xx错误行数:29异常信息:禁用账号失败原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。