【发布时间】: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