springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇

1 总体介绍

本次实践的内容是springboot集成其他技术的方式和步骤,本篇主要包括对前端模板thymeleaf、json字符串转换、文件上传、自定义异常和全局配置的集成

2 实践步骤

使用springboot初始化器创建新模块,取名为integrate

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第1张图片

勾选web模块、thymeleaf模块和数据库相关模块

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第2张图片

在配置文件中对thymeleaf的所有配置相关都可以在ThymeleafProperties中找到,主要是通过@ConfigurationProperties注解完成映射的

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第3张图片

此图表示在配置文件中thymeleaf的所有配置选项

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第4张图片

创建Person实体类

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第5张图片

创建对应的Controller,设置模拟数据后返回ModelAndView对象,其中指定视图模板名

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第6张图片

thymeleaf默认会去templates目录下寻找模板视图,在该路径下创建对应的html,其中th:格式是thymeleaf特有的

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第7张图片

启动服务,在浏览器中输入地址即可看到模板渲染后的内容

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第8张图片

在springboot中默认使用的是jackson进行json字符串的转换,如果实体类中存在日期类型,则可以使用@JsonFormat指定需要显示的格式

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第9张图片

编写对应的方法

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第10张图片

在浏览器中访问地址,可以看到springboot已经将对象转换为了json字符串,其中日期的格式和在实体类中指定的一样

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第11张图片

springboot支持市面上大多数的json工具,使用时只需要将自带的jackson排除,然后引入对应json工具的依赖即可,下面的示例表示用gson代替jackson

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第12张图片

使用gson时需要通过GsonHttpMessageConverter告诉gson如何将实体类映射为json串,它并不支持@JsonFormat注解,比如将日期以指定的格式输出,如下所示

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第13张图片

重新访问路径,可以看到日期格式已经变为了gson中自定义的格式了

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第14张图片

在spirngboot中进行文件上传很简单,首先需要准备一个页面,其中enctype要使用文件上传专用的
springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第15张图片

编写文件上传的controller,将获取到的文件保存在某个目录中

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第16张图片

启动服务,访问文件上传页面

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第17张图片

选择文件并上传后可以看到服务器返回的保存文件的路径

在这里插入图片描述

假设在文件上传时出错了,springboot会默认使用自带的错误页面和错误信息,用户也可以自己配置自定义的错误信息和页面,下面的方法上使用@ExceptionHandler注解的值表明它是负责处理当上传文件的大小超过限制时应该显示什么错误信息和错误页面

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第18张图片

编写对应的错误页面

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第19张图片

选择一个大文件进行上传,页面就会显示自定义的错误信息

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第20张图片

@ControllerAdvice可以和多个注解配合使用,它的含义是@Controller和@Advice的合体,和@ModelAttribute注解一起使用意味着在其他类中可以获取到该注解标注的值

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第21张图片

编写controller类,在测试方法中获取model的值并打印出来

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第22张图片

可以看到虽然在controller中没有向model中设置值,但是在其执行之前@ModelAttribute注解标注的方法已经执行完毕并将返回值放入了model中,因此可以在controller方法中获取到

在这里插入图片描述

springboot还支持在进行数据映射时为对象指定别名,这样可以更好的区分对象中有相同字段的实体,首先创建两个实体类,其中都包含name字段
springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第23张图片

如果直接在方法中已参数的形式要求springboot对其映射,则springboot不知道将name属性映射到哪个实体类中

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第24张图片

解决办法是通过@ModelAttribute为每个对象指定一个别名

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第25张图片

然后通过@InitBinder注解为指定的实体创建前缀,这两个方法时在@ControllerAdvice中定义的

springboot2.x入门实战案例学习 (thymeleaf、json、fileupload、globalConfig) :第三篇_第26张图片

3 总结

上面的内容中大部分都是SpirngMVC中自带的功能,其中一小部分才是springboot新增的内容,如果已经熟悉了spring中相关的注解,则理解spirngboot会非常简单,毕竟springboot只是对spirng的一层封装而已,其底层使用的还是spring原先的功能

你可能感兴趣的:(springboot)