Java:自定义全局异常处理程序始终返回200状态

Java:自定义全局异常处理程序始终返回200状态,java,rest,exception-handling,Java,Rest,Exception Handling,我为我的程序创建了一个全局异常处理程序,该程序正在工作并捕获我的异常,但是当我尝试从HttpServletResponse获取状态代码时,我总是得到一个200状态。是否有任何方法可以从exception类获得正确的状态?如果你还有别的工作,我会很感激的。在网上找不到任何东西,我不想为通过我的处理程序的每个异常硬编码一个httpStatus。我想用这个方法捕获所有异常。这是我在my GlobalExceptionHandler类中创建的方法(仅供参考,我对该类使用了@ControllerAdvic

我为我的程序创建了一个全局异常处理程序,该程序正在工作并捕获我的异常,但是当我尝试从HttpServletResponse获取状态代码时,我总是得到一个200状态。是否有任何方法可以从exception类获得正确的状态?如果你还有别的工作,我会很感激的。在网上找不到任何东西,我不想为通过我的处理程序的每个异常硬编码一个httpStatus。我想用这个方法捕获所有异常。这是我在my GlobalExceptionHandler类中创建的方法(仅供参考,我对该类使用了@ControllerAdvice注释):

@ExceptionHandler(值=Exception.class)
公共@ResponseBody
ResponseEntity错误(HttpServletRequest请求、HttpServletResponse响应、异常e)引发异常{
log.error(“调用“+request.getRequestURI()+”响应时出错:”+Response.toString(),e);
ExceptionResource exception=新的ExceptionResource();
异常.setLocation(request.getRequestURI());
异常.setStatus(response.getStatus());
异常:setStackTrace(例如getStackTrace());
返回新的ResponseEntity(异常,HttpStatus.valueOf(response.getStatus());
}

如果您使用的是Spring MVC,那么您的异常需要有如下内容:

@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")
public class OrderNotFoundException extends RuntimeException {
    // ...
}

回答:我不得不考虑另一个实现,但我确实找到了一种方法来获取使用@ResponseStatus注释创建的自定义异常的状态。您将要使用此选项获取状态:

 HttpStatus status = AnnotationUtils.findAnnotation(exception.getClass(), ResponseStatus.class).value();
其中exception是传递给处理程序的异常

 HttpStatus status = AnnotationUtils.findAnnotation(exception.getClass(), ResponseStatus.class).value();