弹簧启动的自定义异常句柄

时间:2015-05-14 06:19:52

标签: java spring spring-mvc spring-boot

在这里,我的要求是我需要在我的应用程序中使用单独的代码进行异常处理,我看到一个很好的选择spring使用@controller建议来全局处理异常。

@ControllerAdvice

class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleConflict() {
        // Nothing to do
    }
}

但我想在那里进行切割,就像正确的动态消息一样,拥有错误代码。所以我怎么能这样做,我是春季靴子的新手,甚至我不知道春天。需要基本的例子。

1 个答案:

答案 0 :(得分:1)

你可以想出一个像这样的类来捕获在异常情况下要发送的信息: -

public class APIResponse  {
     int errorCode;
     String description;
     String someInformation;
     // any other information that you want to send back in case of exception.
}


@ControllerAdvice
class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ResponseBody
    @ExceptionHandler(DataIntegrityViolationException.class)
    public APIResponse handleConflict(DataIntegrityViolationException exception) {
        APIResponse  response = createResponseFromException(exception);
        return response;
    }
}

在您的控制器建议类中: -

  1. 返回类型为APIResponse而不是void。
  2. 处理程序方法可以将异常作为参数引发。
  3. 使用异常对象创建APIResponse对象。
  4. 将@ResponseBody放在处理程序方法上。