spring boot 整合web开发之文件上传、静态资源访问、异常处理、返回JSON数据
目录
springboot 整合web开发
- 返回json数据
- 静态资源访问
- 文件上传
- 全局异常
1、返回json数据
springboot默认的是jackson-databind做为json处理器、也可以使用自定义转换器:gson、fastjson
gson集成方式为:在pom文件中排除jackson-databind jar包,添加gson包。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions> </dependency>
dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId> </dependency>
springboot默认提供了Gson自动转换类GsonHttpMessageConvertersConfiguration,因此Gson依赖添加成功后,可以像使用json-databind那样使用Gson。但是如果想格式化日期等操作得需要自己自定义。
@Configuration public class GsonConfig {@BeanGsonHttpMessageConverter gsonHttpMessageConverter() {GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();GsonBuilder builder = new GsonBuilder();builder.setDateFormat("yyyy-MM-dd");builder.excludeFieldsWithModifiers(Modifier.PROTECTED);Gson gson = builder.create();gsonHttpMessageConverter.setGson(gson);return gsonHttpMessageConverter;}}
fastJson集成方式:在pom文件中排除jackson-databind jar包,添加fastjson
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></exclusion></exclusions> </dependency> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.56</version> </dependency
配置fastjson的HttpMessageConverter
@Configuration public class MyFastJsonConfig {@BeanFastJsonHttpMessageConverter fastJsonHttpMessageConverter() {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setDateFormat("yyyy-MM-dd");config.setCharset(Charset.forName("UTF-8"));config.setSerializerFeatures(SerializerFeature.WriteClassName,SerializerFeature.WriteMapNullValue,SerializerFeature.PrettyFormat,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty);converter.setFastJsonConfig(config);return converter;} }
对于FastJsonHttpMessageConverter的配置,还有另一种方式。实现WevMvcConfigurer接口(spring5.0之前继承WebMvcConfigurerAdapter类来实现)
@Configuration public class MyWebMvcConfig implements WebMvcConfigurer {//处理json@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setDateFormat("yyyy-MM-dd");config.setCharset(Charset.forName("UTF-8"));config.setSerializerFeatures(SerializerFeature.WriteClassName,SerializerFeature.WriteMapNullValue,SerializerFeature.PrettyFormat,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty);converter.setFastJsonConfig(config);converters.add(converter);}//自定义静态资源位置@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");} }
2、静态资源访问
springboot默认会过滤所有的静态资源,默认静态资源5个位置(classpath:/META-INF/resources/、classpath:/resources/、classpath:/static/、classpath:/public/、/),优先级依次降低。
自定义过滤策略:1)、可以在application.properties直接定义过滤规则
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static
2)、java编码实现
@Configuration public class MyWebMvcConfig implements WebMvcConfigurer {//处理json@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setDateFormat("yyyy-MM-dd");config.setCharset(Charset.forName("UTF-8"));config.setSerializerFeatures(SerializerFeature.WriteClassName,SerializerFeature.WriteMapNullValue,SerializerFeature.PrettyFormat,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteNullStringAsEmpty);converter.setFastJsonConfig(config);converters.add(converter);}//自定义静态资源位置@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");} }
3、文件上传
文件上传一共涉及两个组件,一个是CommonsMultipartResolver基于commons-fileupload来处理,另一个是StandardServletMultipartResolver基于serlver3.0multipart 。springboot默认采用的是StandardServletMultipartResolver做为上传组件。
如果想使用CommonsMultipartResolver做为上传组件代码如下:
pom文件需要加入common jar包
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
@Configuration public class MyCommonsMultipartResolver {@Beanpublic CommonsMultipartResolver commonsMultipartResolver() {CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();commonsMultipartResolver.setResolveLazily(true);//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常commonsMultipartResolver.setMaxUploadSize(1024);commonsMultipartResolver.setDefaultEncoding("UTF-8");return commonsMultipartResolver;} }
4、全局异常处理
关键字@ControllerAdvice
1)、返回resonse代码如下,上传文件大小超过限制就会输出到页面。
@ControllerAdvice public class CustomerExceptionHandler {@ExceptionHandler(MaxUploadSizeExceededException.class)public void uploadException(MaxUploadSizeExceededException e, HttpServletResponse resp) throws IOException {resp.setContentType("text/html;charset=utf-8");PrintWriter out = resp.getWriter();out.write("上传文件大小超限");out.flush();out.close();} }
2)、返回ModelAndView
@ControllerAdvice public class CustomerExceptionHtmlHandler {@ExceptionHandler(MaxUploadSizeExceededException.class)public ModelAndView uploadException(MaxUploadSizeExceededException e) throws IOException {ModelAndView view = new ModelAndView();view.addObject("msg","上传文件超限");view.setViewName("/error");return view;} }
@ControllerAdvice还可以配置全局参数,具体代码如下
@ControllerAdvice public class GlobalConfig {@ModelAttribute(value = "info")public Map<String,String> userInfo() {Map<String,String> map = new HashMap<>();map.put("usename","路遥");map.put("gender","男");return map;} }
@RestController public class GlobalController {@GetMapping("/global")public void globalParma(Model model) {Map<String, Object> map = model.asMap();Set<String> strings = map.keySet();Iterator<String> iterator = strings.iterator();while (iterator.hasNext()) {String next = iterator.next();Object o = map.get(next);System.out.println(next + ">>>>>>" + o);}} }
以上所有代码都在:https://github.com/FadeHub/spring-boot-learn 下面的spring-boot-web工程下
spring boot 整合web开发之文件上传、静态资源访问、异常处理、返回JSON数据相关推荐
- Spring Boot配置MinIO(实现文件上传、下载、删除)
1 MinIO MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数 ...
- spring boot 整合web开发(二)
目录 自定义错误页 CORS支持(前端跨域请求) 拦截器HandlerInterceptor 启动系统任务 springboot配置AOP 整合servlet.filter.listener 下图为本 ...
- java批量上传文件_Spring boot 实现单个或批量文件上传功能
一:添加依赖: org.springframework.boot spring-boot-starter-thymeleaf javax.servlet jstl org.apache.tomcat. ...
- Spring Boot(5) web开发(3)拦截器、文件上传、异常处理
Spring Boot(5) web开发(3)拦截器.文件上传.异常处理 学习视频: https://www.bilibili.com/video/BV19K4y1L7MT?p=49&spm_ ...
- Spring Boot之Web开发
Web开发 简单了解 快速上手 JSON 的支持 RESTful 的支持 支持热部署 快速上手 拦截器与过滤器 自定义过滤器 示例 自定义拦截器 示例 打包部署 多环境配置 服务器配置 项目打包 简单 ...
- Spring Boot与web开发
Spring Boot与web开发 1. 2. 3. 4. 5. 6. 7. 8. 9. 0. 四.Web开发 1.简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的 ...
- SpringBoot整合阿里云OSS文件上传、下载、查看、删除
SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...
- MinIO入门-02 SpringBoot 整合MinIO并实现文件上传
SpringBoot 整合MinIO并实现文件上传 1.依赖 <!-- https://mvnrepository.com/artifact/io.minio/minio --> < ...
- web渗透之文件上传漏洞知识总结
一.文件上传漏洞思路: 第一步: 首先看中间件:因为第一步看中间件就是确定是否存在解析漏洞(学习整理几种解析漏洞的对应版本,有些低版本有解析漏洞,有些高版本就没有.)中间件版本确定了,解析漏洞就确定了 ...
最新文章
- PyTorch基于Apex的混合精度加速
- MongoDB 增删改查
- Ubuntu 16.04源码编译安装Apache 2.4.25教程
- 简单三步,用 Python 发邮件
- redismanager 获取不到yml中的密码_SpringBoot敏感信息加密,springboot配置文件密码加密jasypt...
- boost::hana::iterate用法的测试程序
- ejb运行程序_在哪里可以运行EJB?
- 12v小型电机型号大全_鄂破碎机型号大全图,小型鄂破碎机价格
- 2020年最具“钱途”的编程语言
- 05.Qt设置背景图片
- C# 将链表存入二进制文件及读取二进制文件得到链表示例
- UTrust4701F双界面NFC读写器读卡器测试软件读写NFC电子标签的文本|网址|电子名片|智能海报|蓝牙地址内容操作说明
- iOSAPP创建桌面快捷方式
- 龙讯3号 龙芯电脑即将店面销售
- 服务器主板不装系统进不去BIOS,bios进不去怎么装系统
- Rust学习教程32 - 动态数组Vec
- vue-cli-service build 环境设置
- java基础国庆作业_国庆JAVA作业
- 央视版笑傲江湖的价值观 (转)
- BootstrapTooltip
热门文章
- 7 centos 修改磁盘uuid_Centos7修改分区空间
- 吴恩达深度学习笔记6-Course2-Week2【优化算法】
- c++17(33)-数值上下限、无穷、非数、中文字符串
- .net随笔-vb.net打开外部程序发送键盘信号(2)
- 【深度学习】人群距离监测 DeepSOCIAL 最全汉化论文+源码导读
- 瞥一瞥AI,撩一撩算法,顺便送几本书
- 【NLP】不讲武德,只用标签名就能做文本分类
- 【实战】使用pyecharts绘制词云图-淘宝商品评论展示
- 新论文推荐:Auto-Keras:自动搜索深度学习模型的网络架构和超参数
- 【论文复现与改进】针对弱标注数据多标签矩阵恢复问题,改进后的MCWD算法,让你的弱标注多标签数据赢在起跑线上