Spring中的自定义Http状态代码

Saf*_*ari 3 java spring spring-boot

我正在使用Spring Boot,并且在整个业务逻辑代码中都使用了异常类。一个可能看起来像这样:

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class ExternalDependencyException extends RuntimeException {

    public ExternalDependencyException() {
        super("External Dependency Failed");
    }
    public ExternalDependencyException(String message) {
        super(message);
    }

}
Run Code Online (Sandbox Code Playgroud)

好了,现在出现了Exception,没有适合的预定义Http Status代码,因此我想使用状态代码,例如460或类似的代码,它仍然是免费的,但是注释ResponseStatus只接受enum的值HttpStatus。有没有办法在Java Spring Boot环境中使用自定义状态代码来实现Exception类?

mde*_*man 6

我不知道使用@ResponseStatus的方法

解决此问题的一种方法是使用@RestControllerAdvice。这将允许您自定义返回异常的方式。

@RestControllerAdvice
public class WebRestControllerAdvice  {

    @ExceptionHandler(ExternalDependencyException.class)
    public String handleGitlabException(ExternalDependencyException ex, HttpServletResponse response) {
        try {
            response.sendError(460);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ex.getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)