我将一些网页和相关控制器添加到现有的REST API项目中。
在现有项目中,错误处理是通过@ControllerAdvice
类实现的,具有几个特定的@ExceptionHandler
方法和一个自定义ErrorController
实现(用于自定义Spring Boot提供的默认错误控制器)。
正如预期的那样,所有这些方法都以JSON格式返回错误数据,因此每次发生错误时我都会收到JSON对象作为响应,即使在(Web)控制器中也是如此。
我想区分API错误和" web"错误。或者根据请求格式以更一致的格式生成响应可能更好。
这是解决这个问题的常用方法吗?我应该为API和Web区域实现不同的错误处理,还是应该简单地验证请求格式? 你能提供任何例子吗?
答案 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响应。