其他分享
首页 > 其他分享> > SpringMVC的文件、数据校验(Vaildator、Annotation JSR-303)

SpringMVC的文件、数据校验(Vaildator、Annotation JSR-303)

作者:互联网

SpringMvc的文件上传下载:

文件上传

单文件上传

1.底层使用的是Apache fileupload组件进行上传的功能,Springmvc 只是对其进行了封装,简化开发,

pom.xml

<!--    apache fileupload-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>

2.JSP页面处理

JSP

<%--
  Created by IntelliJ IDEA.
  User: 郝泾钊
  Date: 2022-04-07
  Time: 16:06
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form action="/file/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="img"/>
        <input type="submit" value="提交"/>
    </form>
<img src="${src}">
</body>
</html>

Handler

package com.southwind.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@Controller
@RequestMapping("/file")
public class fileHandler {
    @PostMapping("/upload")
    public String upload(@RequestParam("img")MultipartFile img, HttpServletRequest request) {
        if(img.getSize()>0){
            String path =request.getSession().getServletContext().getRealPath("file");
            String fileName =img.getOriginalFilename();
            File file =new File(path,fileName);
            try {
                img.transferTo(file);
                request.setAttribute("src","/file/"+fileName);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return "upload";
    }
}

配置解析器:

<!--    配置转换器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

二:多文件:

@PostMapping("/uploads")
public String uploads(@RequestParam("imgs")MultipartFile[] imgs, HttpServletRequest request) {
    List<String> pathlist = new ArrayList<>();
    for (MultipartFile img : imgs) {
        if (img.getSize() > 0) {
            String path = request.getSession().getServletContext().getRealPath("file");
            String fileName = img.getOriginalFilename();
            File file = new File(path, fileName);
            try {
                img.transferTo(file);
                pathlist.add("/file/" + fileName);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
    request.setAttribute("list",pathlist);
    return "upload";
}

<form action="/file/uploads" method="post" enctype="multipart/form-data">
        file1:<input type="file" name="imgs"><br>
        file1:<input type="file" name="imgs"><br>
        <input type="submit" value="提交">
</form>
<c:forEach items="${list}" var="path">
    <img src="${path}" width="300px">
</c:forEach>

文件下载

@GetMapping("/downLoad")
public void downLoad(String fileName, HttpServletRequest request, HttpServletResponse response){
    if(fileName!=null){
        String path = request.getSession().getServletContext().getRealPath("file");
        File file =new File(path,fileName);
        OutputStream outputStream=null;
        if(file.exists()){
            //设置下载文件
            response.setContentType("application/force-downlocad");
            //设置文件名
            response.setHeader("Content-Dispoition","attachment;filename"+fileName);
            try {
                outputStream=response.getOutputStream();
                outputStream.write(FileUtils.readFileToByteArray(file));
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(outputStream!=null){
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

}

Spring Mvc 数据校验的组件

有两种:

3.业务方法:

package com.southwind.controller;

import com.southwind.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/validatior")

public class ValidatiorHandler {
    //先数据绑定
    @GetMapping("/login")
    public String  login(Model model){
        model.addAttribute(new Student());
        return  "login";
    }
    @RequestMapping("/login")
    public String login(@Validated Student student, BindingResult bindingResult){
        if(bindingResult.hasErrors()){
            return "login";
        }else {
            return "login";
        }
    }
}

package com.southwind.validation;

import com.southwind.entity.Student;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class StudentValidator implements Validator {

    @Override
    public boolean supports(Class<?> aClass) {
        return Student.class.equals(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        ValidationUtils.rejectIfEmpty(errors,"name",null,"姓名不能为空");
        ValidationUtils.rejectIfEmpty(errors,"password",null,"密码不能为空");
    }
}

Annotation JSR-303

Hibernater Validator,通过注解完成校验

名称 说明
@Null 被标注的元素必须为 null
@NotNull 被标注的元素必须不为 null
@AssertTrue 被标注的元素必须为 true
@AssertFalse 被标注的元素必须为 false
@Min(value) 被标注的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被标注的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMax(value) 被标注的元素必须是一个数字,其值必须大于等于指定的最大值
@DecimalMin(value) 被标注的元素必须是一个数字,其值必须小于等于指定的最小值
@size 被标注的元素的大小必须在指定的范围内
@Digits(integer,fraction) 被标注的元素必须是一个数字,其值必须在可接受的范围内;integer 指定整数精度,fraction 指定小数精度
@Past 被标注的元素必须是一个过去的日期
@Future 被标注的元素必须是一个将来的日期
@Pattern(value) 被标注的元素必须符合指定的正则表达式

配置:

pom.xml

<!--    JSP303-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.3.6.Final</version>
    </dependency>
    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
      <version>2.0.1.Final</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.logging</groupId>
      <artifactId>jboss-logging</artifactId>
      <version>3.4.1.Final</version>
    </dependency>

<mvc:annotation-driven></mvc:annotation-driven>

业务页面:

@GetMapping("/register")
public String register(Model model){
    model.addAttribute(new Account());
    return "register";
}

@PostMapping("/register")
public  String register(@Valid Account account,BindingResult bindingResult ){
    if(bindingResult.hasErrors()){
        return "register";
    }else {
        return "success";
    }

}

实体类:

package com.southwind.entity;

import lombok.Data;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Data
public class Account {
    @NotEmpty(message = "用户名不能为空")
    private  String userName;
    @Size(min = 6,max = 20,message = "长度为5到20位")
    private  String password;
    @Email(regexp = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?",message = "请输入正确的表达式")
    private  String email;
    @Pattern(regexp = "\\d{3}-\\d{8}|\\d{4}-\\{7,8}",message = "请输入正确的表达式")
    private String phone;

}

页面:

<%--
  Created by IntelliJ IDEA.
  User: 郝泾钊
  Date: 2022-04-07
  Time: 19:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h1> 用户登录</h1>
    <form:form modelAttribute="account" action="/validatior/register">
        用户名:<form:input path="userName"></form:input><form:errors path="userName"></form:errors><br>
        密码:<form:input path="password"></form:input><form:errors path="password"></form:errors><br>
        邮箱:<form:input path="email"></form:input><form:errors path="email"></form:errors><br>
        电话:<form:input path="phone"></form:input><form:errors path="phone"></form:errors><br>
        <input type="submit" value="提交">
    </form:form>
</body>
</html>

标签:Vaildator,SpringMVC,303,springframework,org,import,validation,public,String
来源: https://www.cnblogs.com/HJZ114152/p/16406812.html