此文已由作者易国强授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

自定义视图解析

  • 在默认情况下Spring Boot 的MVC框架使用的视图解析ViewResolver类是ContentNegotiatingViewResolver,这个解析器比较智能,它会根据你的请求类型(一般以请求uri的后缀来区分或请求头的Accept得到)来自动选择返回的数据文档类型。

  • 一般情况下,这个能满足大部分人的使用需求,但我们这里只是需要提供RESTful接口的话,那么这个解析规则就不太适合我们了,比如说我们的心跳检测controller中如果返回的是非字符串类型的数据(字符串默认是可以解析成功的),那么就会提示解析失败的错误,

或如下的异常信息:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
....
  • 在这里我们可以在主入口类中继承WebMvcConfigurerAdapter类,修改默认视图解析的解析规则,示例如下所示,这里favorPathExtension方法表示是否支持后缀匹配,我们这里直接设置为false即可实现我们的需求,其他不做任何修改,那么我们的所以返回结果会根据自定义的解析策略返回jackson解析的json格式数据。

    @SpringBootApplicationpublic class BingoWebApplication  extends WebMvcConfigurerAdapter {  public static void main(String[] args) {SpringApplication.run(BingoWebApplication.class, args);}  @Overridepublic void configureContentNegotiation(ContentNegotiationConfigurer configurer) {configurer.favorPathExtension(false);}
    }
  • 上面代码中提到ContentNegotiationConfigurer 这个配置类还可以自定义很多解析的规则,比如ignoreAcceptHeader方式设置是否匹配请求头的信息,defaultContentType方法设置默认匹配类型等等。具体大家可以自己试下。

  • 另外,如果我们需要自定义其他解析器,比如我们常用的freemarker的解析器,那么也很简单,我们仍然可以在主入口类中继承WebMvcConfigurerAdapter类或自定义一个类继承WebMvcConfigurerAdapter类,但需要注意自定义类需要加上@Configuration的注解,然后在里面我们实例化一个视图解析的bean即可。如下所示:

@Beanpublic FreeMarkerViewResolver getFreeMarkerViewResolver(){FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();resolver.setPrefix("");resolver.setSuffix(".ftl");resolver.setContentType("text/html; charset=UTF-8");resolver.setRequestContextAttribute("rc");    return resolver;
}
  • 上面的代码很简单,实际和我们平时在xml中配置的视图解析配置一样。这个Bean实际是覆盖了默认的viewResolver,达到了自定义解析的目的。

扩展

  • 上面简单介绍了如果需要自定义freemarker的视图解析该如何配置,实际上还有另外的方法,spring boot 其实已经帮我们做了很多事情,比如说它集成了freemarker的功能,那么我们只需要引入相关的依赖即可达到我们的目的,在pom文件中加入如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>
  • 加入上述依赖即可正常使用freemarker的功能,默认情况下无需其他的配置,我们的静态文件可以放在工程的static目录,模板文件则放在templates目录下即可,这两个目录在我们新建工程的时候就自动帮我创建完成了,如果不是采用的框架自动创建的,那么手动创建此目录即可,当然你可以设置其他自定义的存放目录,在核心配置文件中自定义设置即可,比如设定ftl文件路径 :spring.freemarker.template-loader-path=classpath:/templates


  • 不足之处,欢迎指正,谢谢~

免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击。

相关文章:
【推荐】 认识用户访谈

转载于:https://www.cnblogs.com/163yun/p/9883517.html

Spring Boot 学习系列(05)—自定义视图解析规则相关推荐

  1. Spring Boot 学习系列(08)—自定义servlet、filter及listener

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...

  2. Spring Boot 学习系列(09)—自定义Bean的顺序加载

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Bean 的顺序加载 有些场景中,我们希望编写的Bean能够按照指定的顺序进行加载.比如,有UserServ ...

  3. Spring Boot 学习系列(07)—properties文件读取

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的properties读取方式 一般的,我们都可以自定义一个xxx.properties文件,然后在工程 ...

  4. Spring Boot 学习系列(01)—从0到1,只需两分钟

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 快速构建 如果我们想基于spring mvc 提供一个简单的API查询服务,传统的方式,首先需要我们引入sp ...

  5. Spring Boot 学习系列(04)—分而治之,多module打包

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 明确功能,各司其职 在一个结构清晰的项目中,一个没有module划分的结构显然不是最佳实践.有人会说可以在同 ...

  6. Spring Boot 学习系列(02)—使用热部署,提升开发效

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 开发调试很简单 热部署的使用非常简单,但能极大的提高我们的开发效率,像传统的web应用,我们修改后需要重新编 ...

  7. Spring Boot实战系列《六》:人事管理系统的登录设计

    Spring Boot实战系列<六>:人事管理系统的登录设计 Spring Boot实战系列<六>:人事管理系统的登录设计 1.前言 在上一篇中教大家在IEDA或者eclips ...

  8. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  9. Spring Boot学习笔记(1)

    文章目录 Spring Boot学习笔记(1) Spring Boot 整合 JSP Spring Boot HTML Thymeleaf 常用语法 Spring Boot 数据校验 Spring B ...

最新文章

  1. 【Java8精华教程】一起爪哇Java8——好用的Stream
  2. linux raid配置
  3. Java语言学习概述
  4. 指针数组下标JAVA_C语言中下标与指针的转换以及指向指针的指针的例子
  5. 南蛮图腾(洛谷P1498题题解,Java语言描述)
  6. 图片旋转 rotate
  7. maven build后Downloading maven-metadata.xml
  8. 《智能计算系统》课程报告——《An Efficient FPGA Accelerator Optimized for High Throughput Sparse CNN Inference》学习笔记
  9. idea/eclipse/vscode同时搜索多个文件类型
  10. 单层的神经网络使用自定义的损失函数
  11. java迷宫算法_迷宫算法(JAVA实现)
  12. loadrunner支持的浏览器版本
  13. 如何解决Access denied for user ''@'localhost' (using password: NO)错误
  14. HDU 5713 K个联通块(状压DP)
  15. HiTool工具烧录rootfs过程
  16. 计算机主机的光驱怎么打开,笔记本电脑光驱怎么打开?高手教你打开笔记本光驱的方法...
  17. 你所在专业的特色是什么计算机,专业特色是什么
  18. 吴以岭委员:中药企业创新风险大 必须迎难而上
  19. 产品经理如何了解高深莫测的大数据?
  20. 如何使用蓝牙实现OTA固件升级

热门文章

  1. ASP.NET核心之路微服务第03部分:Identity
  2. ASP.NET MVC的最佳日志记录库
  3. python在什么平台开发_python主要用于开发什么
  4. 微信中打开h5页面,直接关闭窗口js
  5. respond java 使用_java – 使用android问题的HttpResponse:执行总...
  6. mysql已死 subsys被锁_centos6.5安装MYSQL“mysqld已死,但是subsys被锁”的解决方案
  7. ssm框架数据查询一直为null
  8. vb6 word 2002 合并单元格_干货来了!最实用的Word表格小技巧!
  9. Java如何封装参数_java规范(一)------方法设计---返回多参数的方法怎么封装
  10. iphone个人热点无法开启_无法在 iPhone 上正常使用“个人热点”怎么办?