异常处理程序不能使用`spring-boot-starter-data-rest`

我最后一次Java / Spring的经验大约在四年前。 我开始用Kotlin学习Spring Boot。

我已经创建了一个像这样的RESTful Web服务(在Kotlin中),它工作正常:

@RequestMapping("/authorization") public fun authorization(@RequestParam(value = "network-type", defaultValue = "Facebook") name: String, @RequestParam(value = "oauth-token") oauthToken: String, @RequestParam(value = "oauth-token-secret", required = false) oauthTokenSecret: String?): Authorization { //TODO: Handle other social network types return facebookAuth.authorization(oauthToken) } 

现在我无法添加一个异常处理程序,当facebookAuth抛出UnauthorizedException。

我试过了:

  • 我试图在控制器上注册一个异常处理程序方法。
  • 我试过用@ControllerAdvice创建交叉异常顾问类

在这两种情况下,异常都没有映射,而是我得到:

白标签错误页面

此应用程序没有明确的映射/错误,所以你看到这是一个后备。

 Sun Oct 25 16:00:43 PHT 2015 There was an unexpected error (type=Internal Server Error, status=500). Invalid OAuth access token. 

题:

Spring Boot的正确方法是注册一个可以返回一个序列化的ErrorResponse对象的异常处理程序。

我能够通过注册以下异常处理程序得到它的工作:

 @ControllerAdvice public class ExceptionHandler : ResponseEntityExceptionHandler() { @ExceptionHandler(Throwable::class) @ResponseBody internal fun onException(ex: Throwable): ErrorResponse { //TODO: Replace instanceof with polymorphism var responseCode = ResponseCode.VAMPServiceError if (ex is UnauthorizedException) { responseCode = ResponseCode.VAMPUnauthorized } val errorResponse = ErrorResponse( response = ResponseHeader(responseCode, ex.message)) return errorResponse } } 

这是基于另一个StackOverflow anwer(我已经失去了)。 在答案中,答案建议在处理程序中包含@EnableWebMVC 。 我发现这在我的情况下是没有必要的“