kay*_*ahr 30 java spring spring-mvc jackson
我在Spring 4.0.3中使用以下异常处理程序拦截异常并向用户显示自定义错误页面:
@ControllerAdvice
public class ExceptionHandlerController
{
@ExceptionHandler(value = Exception.class)
public ModelAndView handleError(HttpServletRequest request, Exception e)
{
ModelAndView mav = new ModelAndView("/errors/500"));
mav.addObject("exception", e);
return mav;
}
}
Run Code Online (Sandbox Code Playgroud)
但是现在我想要对JSON请求进行不同的处理,以便在发生异常时获得此类请求的JSON错误响应.目前,上述代码也由JSON请求(使用Accept: application/json标头)触发,JavaScript客户端不喜欢HTML响应.
如何针对HTML和JSON请求以不同方式处理异常?
dna*_*ang 12
ControllerAdvice注释有一个名为basePackage的元素/属性,可以设置它来确定它应该为控制器扫描哪些包并应用建议.因此,您可以做的是将处理正常请求的控制器和处理AJAX请求的控制器分离到不同的包中,然后使用适当的ControllerAdvice注释编写2个异常处理控制器.例如:
@ControllerAdvice("com.acme.webapp.ajaxcontrollers")
public class AjaxExceptionHandlingController {
...
@ControllerAdvice("com.acme.webapp.controllers")
public class ExceptionHandlingController {
Run Code Online (Sandbox Code Playgroud)
执行此操作的最佳方法(尤其是在servlet 3中)是使用容器注册错误页面,并使用它来调用Spring @Controller.这样您就可以以标准的Spring MVC方式处理不同的响应类型(例如@RequestMapping,对于您的机器客户端使用produce = ...).
我从你的另一个问题看到你正在使用Spring Boot.如果升级到快照(换句话说为1.1或更高),您可以立即获得此行为(请参阅参考资料BasicErrorController).如果要覆盖它,只需将/ error路径映射到您自己的路径@Controller.
从 spring 4 开始,controlleradvice 注释有多个可以设置的属性。您可以应用不同的规则定义多个控制器建议。
其中一个属性是“注释”。也许您可以在 json 请求映射上使用特定注释,或者您可能会发现另一个更有用的属性?
| 归档时间: |
|
| 查看次数: |
16088 次 |
| 最近记录: |