【问题标题】:@ControllerAdvice does not map to the error@ControllerAdvice 未映射到错误
【发布时间】:2019-09-30 14:31:21
【问题描述】:

我有一个 REST 服务,我需要使用自定义 json 响应发送适当的状态代码,这解释了错误的原因。

我有 @Controller 类,它公开了一个服务 /test 并且在点击该服务时,我抛出了一个自定义异常(扩展了 Exception 类)

我有一个处理异常的@ControllerAdvice 类。但是,每当我收到错误时,我都不会得到 json 响应,而是会打印堆栈跟踪。

查看了博客并尝试了解决方案。但是无法解决。

@ControllerAdvice(basePackages = "com.test")
public class ResponseExceptionHandler extends ResponseEntityExceptionHandler{


    @ExceptionHandler(value= {MyException.class})
    @ResponseStatus(code=HttpStatus.INTERNAL_SERVER_ERROR)
    @ResponseBody
    ResponseEntity<MyResponse> commonServiceException(MyException ex) {
        MyResponse errors = new MyResponse();

        errors.setTimeStamp(LocalDateTime.now());
        errors.setErrorCode(ex.getErrorCode());
        errors.setErrorMessage(ex.getMessage());
        errors.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
        errors.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
        return new ResponseEntity<>(errors, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

服务

@Controller
....
public class test{
..
        @GET
    @Path("/test")
    //@ExceptionHandler(value= {MyException.class})
    @Produces(MediaType.APPLICATION_JSON)
    public  String test() throws MyException{
          throw new MyException("123", "message");

    }

context.xml

<context:component-scan base-package=" com.test">
        <context:include-filter type="annotation"
            expression="org.springframework.web.bind.annotation.ControllerAdvice" />
    </context:component-scan>

预期:JSON 响应

实际:类型异常报告

消息服务当前不可用。错误代码:应用程序错误。错误

描述服务器遇到了一个意外情况,导致它无法完成请求。

例外

com.test.MyException:服务当前不可用。错误代码:应用程序错误..........................

【问题讨论】:

  • 你是直接抛出Myexception吗?或者有另一个类正在处理这个异常并且 controlleradvice 没有得到 Myexception 类。
  • 我只是为了测试目的添加了这个。实际的业务逻辑是另一个类会抛出这个异常
  • 你能显示另一个类吗?因为无论何时您将通过另一个异常处理此异常,您都无法访问控制器建议类。
  • 我还没有准备好其他课程..因为我试图让这个工作。我无法理解您的陈述“无论何时您将通过另一个异常处理此异常,您都无法访问控制器建议类”您能解释一下吗?上面的代码不正确吗?
  • 不,我还以为你还没有在这里写过另一门课。

标签: java spring spring-mvc


【解决方案1】:

这是因为我把 Jersey 和 Spring Framework 混在一起了。在 web.xml 中进行必要的 spring servlet 配置并使用 @RequestMapping 后,问题得到解决。

【讨论】:

    猜你喜欢
    • 2013-03-03
    • 2020-04-20
    • 1970-01-01
    • 2013-08-09
    • 2018-08-20
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多