• 目录

    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数据相关推荐

  1. Spring Boot配置MinIO(实现文件上传、下载、删除)

    1 MinIO MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数 ...

  2. spring boot 整合web开发(二)

    目录 自定义错误页 CORS支持(前端跨域请求) 拦截器HandlerInterceptor 启动系统任务 springboot配置AOP 整合servlet.filter.listener 下图为本 ...

  3. java批量上传文件_Spring boot 实现单个或批量文件上传功能

    一:添加依赖: org.springframework.boot spring-boot-starter-thymeleaf javax.servlet jstl org.apache.tomcat. ...

  4. Spring Boot(5) web开发(3)拦截器、文件上传、异常处理

    Spring Boot(5) web开发(3)拦截器.文件上传.异常处理 学习视频: https://www.bilibili.com/video/BV19K4y1L7MT?p=49&spm_ ...

  5. Spring Boot之Web开发

    Web开发 简单了解 快速上手 JSON 的支持 RESTful 的支持 支持热部署 快速上手 拦截器与过滤器 自定义过滤器 示例 自定义拦截器 示例 打包部署 多环境配置 服务器配置 项目打包 简单 ...

  6. Spring Boot与web开发

    Spring Boot与web开发 1. 2. 3. 4. 5. 6. 7. 8. 9. 0. 四.Web开发 1.简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的 ...

  7. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...

  8. MinIO入门-02 SpringBoot 整合MinIO并实现文件上传

    SpringBoot 整合MinIO并实现文件上传 1.依赖 <!-- https://mvnrepository.com/artifact/io.minio/minio --> < ...

  9. web渗透之文件上传漏洞知识总结

    一.文件上传漏洞思路: 第一步: 首先看中间件:因为第一步看中间件就是确定是否存在解析漏洞(学习整理几种解析漏洞的对应版本,有些低版本有解析漏洞,有些高版本就没有.)中间件版本确定了,解析漏洞就确定了 ...

最新文章

  1. PyTorch基于Apex的混合精度加速
  2. MongoDB 增删改查
  3. Ubuntu 16.04源码编译安装Apache 2.4.25教程
  4. 简单三步,用 Python 发邮件
  5. redismanager 获取不到yml中的密码_SpringBoot敏感信息加密,springboot配置文件密码加密jasypt...
  6. boost::hana::iterate用法的测试程序
  7. ejb运行程序_在哪里可以运行EJB?
  8. 12v小型电机型号大全_鄂破碎机型号大全图,小型鄂破碎机价格
  9. 2020年最具“钱途”的编程语言
  10. 05.Qt设置背景图片
  11. C# 将链表存入二进制文件及读取二进制文件得到链表示例
  12. UTrust4701F双界面NFC读写器读卡器测试软件读写NFC电子标签的文本|网址|电子名片|智能海报|蓝牙地址内容操作说明
  13. iOSAPP创建桌面快捷方式
  14. 龙讯3号 龙芯电脑即将店面销售
  15. 服务器主板不装系统进不去BIOS,bios进不去怎么装系统
  16. Rust学习教程32 - 动态数组Vec
  17. vue-cli-service build 环境设置
  18. java基础国庆作业_国庆JAVA作业
  19. 央视版笑傲江湖的价值观 (转)
  20. BootstrapTooltip

热门文章

  1. 7 centos 修改磁盘uuid_Centos7修改分区空间
  2. 吴恩达深度学习笔记6-Course2-Week2【优化算法】
  3. c++17(33)-数值上下限、无穷、非数、中文字符串
  4. .net随笔-vb.net打开外部程序发送键盘信号(2)
  5. 【深度学习】人群距离监测 DeepSOCIAL 最全汉化论文+源码导读
  6. 瞥一瞥AI,撩一撩算法,顺便送几本书
  7. 【NLP】不讲武德,只用标签名就能做文本分类
  8. 【实战】使用pyecharts绘制词云图-淘宝商品评论展示
  9. 新论文推荐:Auto-Keras:自动搜索深度学习模型的网络架构和超参数
  10. 【论文复现与改进】针对弱标注数据多标签矩阵恢复问题,改进后的MCWD算法,让你的弱标注多标签数据赢在起跑线上