Spring Boot 学习系列(05)—自定义视图解析规则
此文已由作者易国强授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
自定义视图解析
在默认情况下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);
} @Override
public 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
不足之处,欢迎指正,谢谢~
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 认识用户访谈
Spring Boot 学习系列(05)—自定义视图解析规则的更多相关文章
- Spring Boot 学习系列(08)—自定义servlet、filter及listener
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和li ...
- Spring Boot 学习系列(09)—自定义Bean的顺序加载
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Bean 的顺序加载 有些场景中,我们希望编写的Bean能够按照指定的顺序进行加载.比如,有UserServ ...
- Spring Boot 学习系列(03)—jar or war,做出你的选择
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 两种打包方式 采用Spring Boot框架来构建项目,我们对项目的打包有两种方式可供选择,一种仍保持原有的 ...
- Spring Boot 学习系列(10)—SpringBoot+JSP的使
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 解决问题 随着spring boot 框架的逐步使用,我们期望对于一些已有的系统进行改造,做成通用的脚手架, ...
- Spring boot 学习笔记 1 - 自定义错误
Spring Boot提供了WebExceptionHandler一个以合理的方式处理所有错误的方法.它在处理顺序中的位置就在WebFlux提供的处理程序之前,这被认为是最后一个处理程序. 对于机器客 ...
- Spring Boot 学习系列(06)—采用log4j2记录日志
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 为什么选择log4j2 log4j2相比于log4j1.x和logback来说,具有更快的执行速度.同时也支 ...
- Spring Boot 学习系列(07)—properties文件读取
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的properties读取方式 一般的,我们都可以自定义一个xxx.properties文件,然后在工程 ...
- Spring Boot 学习系列(01)—从0到1,只需两分钟
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 快速构建 如果我们想基于spring mvc 提供一个简单的API查询服务,传统的方式,首先需要我们引入sp ...
- Spring Boot 学习系列(序)—Spring Boot
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Spring Boot? Spring Boot 是由pivotal团队提供的一个基于Spring的全新框架 ...
随机推荐
- CEF源码编译
CEF的构造说明:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding chromium的源码地址:https://c ...
- C# 保护进程不被结束(源代码)防任务管理器结束进程
C# 保护进程不被结束(源代码)防任务管理器结束进程 Posted on 2013-03-25 16:03 快乐家++ 阅读(3173) 评论(3) 编辑 收藏 闲来无事,英语又学的太痛苦.看到我妈妈 ...
- CentOS7安装wget 及配置
yum -y install wget yum -y install setup yum -y install perl
- openwrt 按下回车才能显示图标信息
如题所示,openwrt启动后,手动才能按下系统图标和信息. 如何却掉这个手动选项呢? 修改文件/SISP-L26.7.8-OpenWrt/build_dir/target-arm_uClibc-0. ...
- webrtc doubango linphone
1.doubango官网:http://www.doubango.org/ 2.doubango是一个开源的VOIP基础平台, 并能用于嵌入式和桌面系统的开源框架,该框架使用ANSCI-C编写,具有很 ...
- 【转】 Pro Android学习笔记(八九):了解Handler(3):延迟执行小例子
目录(?)[-] 小例子 Handler的处理 Activity的代码片段 后台线程和UI的互动 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://b ...
- rails 自定义校验及validates_each多校验
一.自定义校验 使用 validate 方法传入一个同名方法的 Symbol 即可. validate :my_validation private def my_validation if name ...
- paramiko监控 windows服务器 被监控服务器只需要安装openssh服务即可基于wmic完成大部分监控
#!/usr/bin/python #-*- coding: UTF-8 -*- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- Runtime机制的使用整理
一.基本概念 1.1.RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制. 1.2.对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何 ...
- python去掉括号之间的字符
在字符串中识别括号并删除括号及其中的内容括号包括 大中小 3种括号 输入为 1个字符串 s="我是一个人(中国人)[真的]{确定}"; 输出为 result = "我是一 ...