Springboot统一返回错误格式

@Slf4j
@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    private final static String MethodArgumentNotValidExceptionCode = "10001";//vo字段验证异常
    //自定义的报错
    @SneakyThrows
    @ExceptionHandler(value = BaseException.class)
    public ResponseEntity<String> baseException(BaseException e, HttpServletRequest request) {
        return getException(e, e.getErrorCode(), e.getErrorMsg(), request);
    }
    //字段验证报错
    @SneakyThrows
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> baseException(MethodArgumentNotValidException e, HttpServletRequest request, HttpServletResponse response) {
        return getException(e, MethodArgumentNotValidExceptionCode, Objects.requireNonNull(e.getBindingResult().getFieldError()).getDefaultMessage(), request);
    }

    //返回错误的统一格式
    @SneakyThrows
    public ResponseEntity<String> getException(Exception e, String code, String msg, HttpServletRequest request) {
        log.error("PATH:" + request.getServletPath() + ",code:" + code + ",mgs:" + msg + "\n" + getStackTrace(e));
        ResponseData.Builder<String> builder = ResponseData.builder();
        builder.error(code);
        builder.msg(msg);
        ObjectMapper objectMapper = new ObjectMapper();
        String body = objectMapper.writeValueAsString(builder.build());
        HttpHeaders responseHeaders = new HttpHeaders();
        responseHeaders.set("Content-Type", "application/json;charset=UTF-8");
        return ResponseEntity.ok().headers(responseHeaders).body(body);
    }
    //返回抛错的过程
    public static String getStackTrace(final Throwable throwable) {
        final StringWriter sw = new StringWriter();
        final PrintWriter pw = new PrintWriter(sw, true);
        throwable.printStackTrace(pw);
        return sw.getBuffer().toString();
    }
}

主要是为了和返回的数据统一格式。判断code是否正常返回。

错误返回格式:

正常返回格式:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 中,我们可以使用统一返回处理来规范 API 接口的返回格式,避免重复的代码和降低维护成本。 一般来说,我们可以定义一个 Result 类来封装接口返回数据,包括状态码、提示信息和返回数据等。同时,我们还可以定义一个异常处理类来捕获全局的异常,并将异常信息封装到 Result 类中返回给前端。 以下是一个示例代码: ```java @Data @NoArgsConstructor @AllArgsConstructor public class Result<T> { private Integer code; private String msg; private T data; public static <T> Result<T> success(T data) { return new Result<>(200, "success", data); } public static Result<?> error(Integer code, String msg) { return new Result<>(code, msg, null); } } @ControllerAdvice @ResponseBody public class GlobalExceptionHandler { @ExceptionHandler(value = Exception.class) public Result<?> handleException(Exception e) { log.error("未知异常:{}", e.getMessage()); return Result.error(500, "服务器内部错误"); } @ExceptionHandler(value = BusinessException.class) public Result<?> handleBusinessException(BusinessException e) { log.error("业务异常:{}", e.getMessage()); return Result.error(e.getCode(), e.getMessage()); } } ``` 在上面的代码中,我们定义了一个 Result 类来封装接口返回数据。其中,success 方法表示成功时返回的结果,error 方法表示失败时返回的结果。 同时,我们还定义了一个全局异常处理器 GlobalExceptionHandler,用来捕获全局的异常。在 handleException 和 handleBusinessException 方法中,我们分别处理了未知异常和业务异常,并将异常信息封装到 Result 类中返回给前端。 通过使用统一返回处理,我们可以大大简化接口返回的代码,提高代码的可维护性和可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值