SpringBoot自学第8天——文件上传、异常处理、Druid数据源

本文介绍了如何在SpringBoot中实现文件上传,包括表单设置、Controller接收和配置文件。同时,讲解了异常处理机制,包括自定义异常和异常解析。此外,详细阐述了整合Druid数据源的步骤,包括配置文件、添加依赖和设置监控。最后,提供了相关代码示例。
摘要由CSDN通过智能技术生成

上一章

SpringBoot自学第7天——thymeleaf+拦截器写好网页登陆功能



前言

看过这么多源码,我已经学会自动跳过并寻找有用信息了。
P162 | P164 | P166-170 | P172建议跳过(跟我一样肝的人建议不接受建议,可以感受一下绝望)


一、文件上传

1. 表单编写注意要点

  1. 表单提交方式为post,并且要设置上传数据类型为multipart/form-data
    例如:<form th:action="@{/load_1}" method="post" enctype="multipart/form-data">
  2. 表单内文件上传组件input设置为type=“file”,多文件上传需要加上multiple属性

2.后台Controller接收

多文件接收用MultipartFile[] 类型,单文件用MultipartFile类型
示例代码如下:

@ResponseBody
@PostMapping("/load_2")
 public String upload_2(@RequestParam("email") String email,
                        @RequestParam("pass") String pass,
                        @RequestPart("photos") MultipartFile[] photos){
     StringBuffer stringBuffer = new StringBuffer();
     for(MultipartFile m:photos){
         stringBuffer.append( m.getOriginalFilename()+"; " );
     }
     log.info("email:{},pass:{},PhotoNames:{}",email,pass,stringBuffer);
     return "ok";
 }

3. 文件上传模块配置

#properties文件

#文件上传使能:默认为true
spring.servlet.multipart.enabled=true
#单个文件上传最大大小:默认为1MB
spring.servlet.multipart.max-file-size=20MB
#整个请求最大请求大小:默认为10MB
spring.servlet.multipart.max-request-size=100MB

4. MultipartFile类常用函数

  1. getOriginalFilename()函数 获取文件名(包括后缀)
  2. transferTo() 将文件转存到某个路径中multipartFile.transferTo(new File("D:\\"+headImg.getOriginalFilename()));

二、异常处理

1. 自定义函数,捕捉已存在的异常进行处理

代码如下(示例):

@ControllerAdvice
public class GlobalException {

    /**
     * @ExceptionHandler 注解,默认value参数为一个数组,写可以处理的异常类
     * @return 视图地址,也可以返回ModelAndView(数据+视图)
     */
    @ExceptionHandler({ArithmeticException.class,NullPointerException.class,})
    public String handleArithException(Exception e){
        log.info("捕捉到异常:{}", e);

        return "index";
    }
}

2. 自定义运行时异常,在逻辑代码中主动抛出

代码如下(示例):

 /*
 * 自定义异常需要逻辑代码中主动抛出(运行时异常)
 */
@ResponseStatus(value = HttpStatus.FORBIDDEN,reason = "上传文件超过指定大小")
public class MyException extends RuntimeException{

    public MyException(){
        super();
    }

    public MyException(String message){
        super(message);
    }
}

3. 自定义异常解析

代码如下(示例):

/**
 * 自定义异常解析器 一般用不上,不用看
 * @Order value:优先级 数字越小,该异常解析优先级越高(Integer)
 */
@Order(value = Ordered.HIGHEST_PRECEDENCE)
@Component
public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        try {
            httpServletResponse.sendError(520,"程序员敲代码不认真自动产生错误");
            modelAndView.addObject("code",520);
            modelAndView.addObject("msg","因为想她,大脑产生异常");
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        modelAndView.setViewName("error/520");
        return modelAndView;
    }
}

三、 整合Druid以及开启相关配置

代码如下(示例):

1. 添加相关依赖,并刷新Maven

```xml
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>1.2.6</version>
</dependency>
```

2. 创建application.yml文件,添加druid的配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/eb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

    druid:
      #登陆到管理页
      stat-view-servlet:
        enabled: true
        login-username: 123
        login-password: 123

      #配置监控统计拦截的filters,去掉后监控界面sql无法统计,wall用于防火墙
      aop-patterns: com.mrzs.*
      filters: stat,wall

      #web页面请求监控
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,/druid'

#      maxPoolPreparedStatementPerConnectionSize: 20
#      useGlobalDataSourceStat: true
#      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#
#
#      initialSize: 5
#      minIdle: 5
#      maxActive: 20
#      maxWait: 60000
#      timeBetweenEvictionRunsMillis: 60000
#      minEvictableIdleTimeMillis: 300000
#      validationQuery: SELECT 1 FROM DUAL
#      testWhileIdle: true
#      testOnBorrow: false
#      testOnReturn: false
#      poolPreparedStatements: true


  jdbc:
    template:
      query-timeout: 3

3. 运行程序,访问/druid目录,帐号:123 密码:123登录页面进入监控台

在这里插入图片描述


配置成功

总结

gitee项目:SpringBoot自学第8天——文件上传、异常处理、Druid数据源

下一章

SpringBoot自学第9天——Mybatis plus的整合与使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值