有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringBoot(使用SpringMVC)在默认错误响应中停止发送正文(可能在版本更新之后)

我有一个或多或少简单的CRUD Spring MVC应用程序,只需最少的业务逻辑。因此,我在很大程度上依赖于默认的异常处理,只需用@ResponseStatus注释我的异常类,就可以在一些特殊情况下用几个@ExceptionHandler处理程序控制状态代码。最近我注意到,在依赖默认处理的情况下,我的响应有空的正文,而不是以前包含来自异常的消息(custom@ExceptionHandler工作正常)

我试着查看白标签错误页面,但我能找到的只是如何定制或禁用,没有关于它的错误配置或任何类似的内容。我怀疑这是由更新到较新的spring启动和/或spring云依赖项引起的,但在发行说明中找不到任何解释

我希望JSON包含错误消息,而不是当前完全空的正文


共 (1) 个答案

  1. # 1 楼答案

    @ControllerAdvice
    public class ExceptionController {
    
        @ExceptionHandler({Exception.class})
        public ResponseEntity handler1(Exception e){
            System.out.println("error occurred!");
            ResponseStatus status = AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class);
            HttpStatus res=null;
            if(status!=null){
                   res=status.value()!=null?status.value():(status.code()!=null?status.code():null);
            }
            ResponseResult result = new ResponseResult();
            result.setErrorCode(res!=null?res.value():500);
            result.setMsg(e.getMessage());
            return new ResponseEntity(result,res==null?HttpStatus.INTERNAL_SERVER_ERROR:res);
        }
    
    }
    
    @Setter
    @Getter
    public class ResponseResult {
        private String msg;
    
        private int errorCode;
    }
    

    通过这种方式,它返回包含错误消息的JSON,http响应状态为500或在Exception类上注释的状态