当前位置: 首页 > 知识库问答 >
问题:

如何在Spring MVC中以不同的方式处理HTML和JSON请求的异常

陆和泰
2023-03-14

我使用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;
    }
}

但是现在我想要对JSON请求进行不同的处理,所以当异常发生时,我会得到这类请求的JSON错误响应。目前,上面的代码也是由JSON请求触发的(使用accept:application/JSON标头),JavaScript客户机不喜欢HTML响应。

如何以不同的方式处理HTML和JSON请求的异常?

共有1个答案

许寒
2023-03-14

ControllerAdvision注释有一个名为basePackage的元素/属性,可以设置该元素/属性来确定它应该扫描哪些包以寻找控制器并应用建议。因此,您可以做的是将处理普通请求的控制器和处理AJAX请求的控制器分离到不同的包中,然后编写两个带有适当ControllerAdvision注释的异常处理控制器。例如:

@ControllerAdvice("com.acme.webapp.ajaxcontrollers")
public class AjaxExceptionHandlingController {
...
@ControllerAdvice("com.acme.webapp.controllers")
public class ExceptionHandlingController {
 类似资料:
  • 本文向大家介绍springmvc处理异步请求的示例,包括了springmvc处理异步请求的示例的使用技巧和注意事项,需要的朋友参考一下 springmvc 3.2开始就支持servlet3.0的异步请求。平常我们请求一个controller一般都是同步的,如果在代码执行中,遇到耗时的业务操作,那servlet容器线程就会被锁死,当有其他请求进来的时候就会受堵了。 springmvc3.2之后支持异

  • 问题内容: 进行Ajax调用时,将contentType设置为application / json而不是默认的x-www-form- urlencoded时,服务器端(在PHP中)无法获取post参数。 在以下工作示例中,如果我在ajax请求中将contentType设置为“ application / json”,则PHP $ _POST将为空。为什么会这样?如何在PHP中正确处理content

  • 问题内容: 进行Ajax调用时,将contentType设置为application / json而不是默认的x-www-form- urlencoded时,服务器端(在PHP中)无法获取post参数。 在以下工作示例中,如果我在ajax请求中将contentType设置为“ application / json”,则PHP $ _POST将为空。为什么会这样?我如何在PHP中正确处理conten

  • 我是科特林语言的新手,并尝试从各种YouTube教程和其他在线文章中学习。我从一个视频中学到了什么,并按照这些步骤使用免费的API汇率创建了一个简单的货币转换器。以下是获取货币汇率结果的函数。 问题是,异常被触发,并表示以下内容: 在Manifest.xml中,我设置了以下内容: 免费API对免费用户非常有限,不允许使用。我也不确定编码(它的实现方式)是否以正确的方式实现了我想要实现的目标。欢迎对

  • 我使用的API根据成功/失败有不同的json响应。它们不是HTTP错误,而是json主体中的代码。 我添加了一个,但感觉我只是把事情放在一起,忽略了问题。这是一种可接受的或“pythonic”的方式来处理类似的不同响应吗?另外,如果存在状态,我是否正确地使用来跳过该行?

  • Spring MVC 3.2开始引入了基于Servlet 3的异步请求处理。相比以前,控制器方法已经不一定需要返回一个值,而是可以返回一个java.util.concurrent.Callable的对象,并通过Spring MVC所管理的线程来产生返回值。与此同时,Servlet容器的主线程则可以退出并释放其资源了,同时也允许容器去处理其他的请求。通过一个TaskExecutor,Spring M