异常处理程序不能使用`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
。 我发现这在我的情况下是没有必要的“