3、测试代码
@Controller @RequestMapping public class HelloController { @GetMapping("/test/{type}") public String testContentNegotiation() { return "test ContentNegotiation"; } }
顺序请求:/test/a.pdf、/test/a.json、/test/a.html、/test/a(无后缀)分别得到的页面截图如下(一一对应)
使用Accept方式演示如下:
后缀的优先级高于Accept,符合我们前面的理论知识。若没有指定后缀,Accept就会生效。
说明:因为我这里resolveViewName()是很定的返回了一个view,相当于可以解析任何扩展名。so即使你的扩展名不存在也会被解析,最终以html形式展示出来。在真实场景中是不会这么搞的
另外:这种case还有一种更为简便的测试方案–>无需提供视图解析器,只需提供默认视图即可,有兴趣的小伙伴可以自行尝试,加深理解。
总结
本文借助实例,讲解了ContentNegotiatingViewResolver内容协商在视图解析方面的应用,填补所谓的剩余的20%的内容。
虽然说现在视图技术对于后端来说使用相对较少了,但毕竟thymeleaf还是很优秀的,作为全栈工程师,你也有理由掌握一门模版引擎语言(熟练Vue、React的当我没说)