报错如下:
原因:
当没有声明ViewResolver时,spring会注册一个默认的ViewResolver,就是JstlView的实例, 该对象继承自InternalResoureView。
JstlView用来封装JSP或者同一Web应用中的其他资源,它将model对象作为request请求的属性值暴露出来, 并将该请求通过javax.servlet.RequestDispatcher转发到指定的URL.
Spring认为, 这个view的URL是可以用来指定同一web应用中特定资源的,是可以被RequestDispatcher转发的。
也就是说,在页面渲染(render)之前,Spring会试图使用RequestDispatcher来继续转发该请求。
报错地方代码:
@GetMapping("/async")
public void async(){
asyncService.executeAsync();
}
通过原因分析,造成问题有两个因素:
①缺省转发
②缺省返回值
③view和path同名
解决方案如下
①消除缺省转发
②如果是返回数据:则增加返回值 或 添加@ResponseBody注解
③若是返回页面:修改view和path
例如修改为:
@GetMapping("/async")
public String async(){
asyncService.executeAsync();
return "ok";
}
或
@ResponseBody
@GetMapping("/async")
public void async(){
asyncService.executeAsync();
}