我的最后一次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
在这两种情况下,都没有映射异常,而是得到:
此应用程序没有/ error的显式映射,因此您将此视为后备。
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
对象的异常处理程序的正确方法是什么。
答案 0 :(得分:0)
我能够通过注册以下异常处理程序来实现它:
@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
。我发现在我的情况下这并不是必要的"