Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@ExceptionHandler基于@RequestMapping提供JSON或HTML响应_Java_Spring Mvc - Fatal编程技术网

Java 使用@ExceptionHandler基于@RequestMapping提供JSON或HTML响应

Java 使用@ExceptionHandler基于@RequestMapping提供JSON或HTML响应,java,spring-mvc,Java,Spring Mvc,我的控制器具有根据@RequestMapping(products=“”,consumes=“”)注释生成JSON或HTML的方法。然而,当涉及到以通用方式处理异常时,我面临着一些问题 @RequestMapping(方法=POST) 公共字符串添加(@Valid MyForm form,BindingResult,Model Model){ if(result.hasErrors()){ 返回“编辑”; } 抛出新的运行时异常(“添加错误”); 返回“编辑”; } @请求映射(method=P

我的控制器具有根据@RequestMapping(products=“”,consumes=“”)注释生成JSON或HTML的方法。然而,当涉及到以通用方式处理异常时,我面临着一些问题

@RequestMapping(方法=POST)
公共字符串添加(@Valid MyForm form,BindingResult,Model Model){
if(result.hasErrors()){
返回“编辑”;
}
抛出新的运行时异常(“添加错误”);
返回“编辑”;
}
@请求映射(method=POST,products=“application/json”,consumes=“application/json”)
@应答器
公共映射addJSON(@RequestBody@Valid-MyForm-form,Model-Model){
抛出新的运行时异常(“添加错误”);
}
如何为上述两种方法编写@ExceptionHandler?对于非JSON one,应该在
模型中添加一个属性

model.addAttribute("error", exception.getMessage());
具有JSON响应类型的应该以
Map
的形式返回错误,以便稍后序列化为JSON

我尝试了下面的方法,但是spring不喜欢用相同的异常类型声明两个不同的@ExceptionHandler注释方法

@ExceptionHandler(RuntimeException.class)
@ResponseStatus(值=HttpStatus.BAD_请求)
@请求映射(products=“application/json”)
@应答器
公共映射handleExceptionAsJSON(运行时异常){
Map Map=newhashmap();
put(“error”,exception.getMessage());
返回图;
}
@ExceptionHandler(RuntimeException.class)
公共映射handleException(运行时异常){
Map Map=newhashmap();
put(“error”,exception.getMessage());
返回图;
}

两个
ExceptionHandler
都有
RuntimeException
参数。因此,在您的情况下,仅使用1
exceptionhandler


我不知道你在干什么。但我想,编写自己的
异常解析器将解决您的问题。我已经这么做了。我创建了自己的专用于Ajax请求的
exceptionresolver
,然后将其与现有的
ExceptionHandlerExceptionResolver

“ExceptionHandler是根据throwable参数映射的。因此,在您的情况下,只使用1个ExceptionHandler。”-这不是真的!我修改了上面的第一行。如果您不相信我,请检查
异常HandlerMethodResolver
的第71行(detectExceptionMappings方法)。顺便说一下,Spring3.2.x是我的参考资料。