本次实践的内容是springboot集成其他技术的方式和步骤,本篇主要包括对前端模板thymeleaf、json字符串转换、文件上传、自定义异常和全局配置的集成
使用springboot初始化器创建新模块,取名为integrate
勾选web模块、thymeleaf模块和数据库相关模块
在配置文件中对thymeleaf的所有配置相关都可以在ThymeleafProperties中找到,主要是通过@ConfigurationProperties注解完成映射的
此图表示在配置文件中thymeleaf的所有配置选项
创建Person实体类
创建对应的Controller,设置模拟数据后返回ModelAndView对象,其中指定视图模板名
thymeleaf默认会去templates目录下寻找模板视图,在该路径下创建对应的html,其中th:格式是thymeleaf特有的
启动服务,在浏览器中输入地址即可看到模板渲染后的内容
在springboot中默认使用的是jackson进行json字符串的转换,如果实体类中存在日期类型,则可以使用@JsonFormat指定需要显示的格式
编写对应的方法
在浏览器中访问地址,可以看到springboot已经将对象转换为了json字符串,其中日期的格式和在实体类中指定的一样
springboot支持市面上大多数的json工具,使用时只需要将自带的jackson排除,然后引入对应json工具的依赖即可,下面的示例表示用gson代替jackson
使用gson时需要通过GsonHttpMessageConverter告诉gson如何将实体类映射为json串,它并不支持@JsonFormat注解,比如将日期以指定的格式输出,如下所示
重新访问路径,可以看到日期格式已经变为了gson中自定义的格式了
在spirngboot中进行文件上传很简单,首先需要准备一个页面,其中enctype要使用文件上传专用的
编写文件上传的controller,将获取到的文件保存在某个目录中
启动服务,访问文件上传页面
选择文件并上传后可以看到服务器返回的保存文件的路径
假设在文件上传时出错了,springboot会默认使用自带的错误页面和错误信息,用户也可以自己配置自定义的错误信息和页面,下面的方法上使用@ExceptionHandler注解的值表明它是负责处理当上传文件的大小超过限制时应该显示什么错误信息和错误页面
编写对应的错误页面
选择一个大文件进行上传,页面就会显示自定义的错误信息
@ControllerAdvice可以和多个注解配合使用,它的含义是@Controller和@Advice的合体,和@ModelAttribute注解一起使用意味着在其他类中可以获取到该注解标注的值
编写controller类,在测试方法中获取model的值并打印出来
可以看到虽然在controller中没有向model中设置值,但是在其执行之前@ModelAttribute注解标注的方法已经执行完毕并将返回值放入了model中,因此可以在controller方法中获取到
springboot还支持在进行数据映射时为对象指定别名,这样可以更好的区分对象中有相同字段的实体,首先创建两个实体类,其中都包含name字段
如果直接在方法中已参数的形式要求springboot对其映射,则springboot不知道将name属性映射到哪个实体类中
解决办法是通过@ModelAttribute为每个对象指定一个别名
然后通过@InitBinder注解为指定的实体创建前缀,这两个方法时在@ControllerAdvice中定义的
上面的内容中大部分都是SpirngMVC中自带的功能,其中一小部分才是springboot新增的内容,如果已经熟悉了spring中相关的注解,则理解spirngboot会非常简单,毕竟springboot只是对spirng的一层封装而已,其底层使用的还是spring原先的功能