错误处理:REST API和网页的不同响应格式

时间:2016-07-21 10:20:59

标签: java spring spring-mvc error-handling spring-boot

我将一些网页和相关控制器添加到现有的REST API项目中。

在现有项目中,错误处理是通过@ControllerAdvice类实现的,具有几个特定的​​@ExceptionHandler方法和一个自定义ErrorController实现(用于自定义Spring Boot提供的默认错误控制器)。

正如预期的那样,所有这些方法都以JSON格式返回错误数据,因此每次发生错误时我都会收到JSON对象作为响应,即使在(Web)控制器中也是如此。

我想区分API错误和" web"错误。或者根据请求格式以更一致的格式生成响应可能更好。

这是解决这个问题的常用方法吗?我应该为API和Web区域实现不同的错误处理,还是应该简单地验证请求格式? 你能提供任何例子吗?

1 个答案:

答案 0 :(得分:0)

使用JSON视图很容易。假设该方法返回ModelAndView,如果它是Web请求,则返回常规视图(=网页):

ModelAndView modelAndView = new ModelAndView("myView");

如果它是REST请求(或AJAX请求),则返回JSON视图:

MappingJackson2JsonView jsonView = new MappingJackson2JsonView();
jsonView.setExtractValueFromSingleKeyModel(true);
ModelAndView modelAndView = new ModelAndView(jsonView);
modelAndView.addObject(myResponseObject);

在这种情况下,Spring不返回页面,而是返回表示您提供的对象的JSON响应。