Spring MVC:在@ExceptionHandler上的@RequestStatus中获取原因的i18n消息
问题内容:
我有一个带有Thymeleaf的Spring
Boot应用程序,混合了获取视图和REST异步调用的常规Controller调用。对于REST异步调用中的错误处理,我希望能够提供一个属性作为异常处理的原因,并使其由MessageSource自动转换。
我的处理程序如下。
@ExceptionHandler(Exception.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "general.unexpected.exception")
public ModelAndView handleUnexpectedException(Exception exception) {
logger.error(exception.getMessage(), exception);
return createModelAndView("error");
}
当在常规控制器调用中发生错误时,将显示错误视图。但是,如果是Javascript
REST调用,我希望能够general.unexpected.exception
根据用户区域设置将原因替换为相应的文本,例如“发生意外错误”,因此我可以在UI中的javascript
fail()方法中显示该原因未处理错误的情况。
任何有关如何做到这一点的线索将不胜感激。谢谢 !
问题答案:
如果将异常处理程序放入带有注释的类中@ControllerAdvice
,则可以通过指定annotation
属性来配置此建议以匹配特定的控制器。
在您的情况下,只需为@Controller
和@RestController
和异常处理程序创建单独的建议,并为每个处理程序使用不同的逻辑即可:
@ControllerAdvice(annotations = RestController.class)
class RestAdvice {
@ExceptionHandler
...
}
@ControllerAdvice(annotations = Controller.class)
class MvcAdvice {
@ExceptionHandler
...
}