SpringBoot--SpringBoot 服务端数据校验

SpringBoot 服务端数据校验

  • 校验实体对象
  • 校验普通参数

    1 Spring Boot 对实体对象的校验

        1.1 创建实体对象并添加校验规则
/**
 * @author 守鹤
 * @date 2020/5/14 22:32
 */
public class User {
    /**
     * @NotNull: 对基本数据类型的对象类型做非空校验
     * @NotBlank: 对字符串类型做非空校验
     * @NotEmpty: 对集合类型做非空校验
     */
    @NotNull
    private Integer id;
    @NotBlank
    private String name;
    @NotEmpty
    private List<String> hobbys;

    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}
    public String getName() {return name;  }
    public void setName(String name) {this.name = name;}
    public List<String> getHobbys() {return hobbys;}
    public void setHobbys(List<String> hobbys) {this.hobbys = hobbys;}
}
        1.2 创建controller处理请求,并校验数据
/**
 * @author 守鹤
 * @date 2020/5/14 22:33
 */

@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/addUser")
    //BindingResult 对象封装了校验信息
    public String addUser(@Validated User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
        //实际开发中不需要打印这些信息,只需要判断是否有错误即可
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError error : allErrors) {
                String field = ((FieldError)error).getField();
                String message = error.getDefaultMessage();
                System.out.println(field + "\t" + "message=" + message);
            }
            return "addUser";
        }
        return "ok";
    }
}
        1.3 编写页面接收数据(需要使用th:errors)
  • 默认会将校验对象的类名首字母小写放入作用域中充当key
  • 错误信息放入属性中
  • 本demo中为 th:error="${user.id}"
  • 也可以使用 @ModelAttribute 注解,自定义在作用域中的key的名字

<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<form action="/user/addUser" method="post">
    id:<input type="text" name="id"><font color="red"><span th:errors="${user.id}"/>font><br>
    用户名:<input type="text" name="name"><font color="red"><span th:errors="${user.name}"/>font><br>
    睡觉:<input type="checkbox" name="hobbys" value="sleep">
    玩:<input type="checkbox" name="hobbys" value="play"><font color="red"><span th:errors="${user.hobbys}"/>font><br>
    <input type="submit" value="提交">
form>
body>
html>
        1.4 测试

SpringBoot--SpringBoot 服务端数据校验_第1张图片
SpringBoot--SpringBoot 服务端数据校验_第2张图片

        1.5 修改默认提示信息
  1. 在注解中直接添加 如:(@NotNull (message=“自定义提示信息”))在这里插入图片描述SpringBoot--SpringBoot 服务端数据校验_第3张图片
  2. 使用 ValidationMessages.properties 配置文件,文件名字不能写错

配置文件内容:

user.id.notnull=id is not null

通过表达式 {key} 取值
SpringBoot--SpringBoot 服务端数据校验_第4张图片
SpringBoot--SpringBoot 服务端数据校验_第5张图片


   2 SpringBoot 对 Controller 中其他参数的校验

/**
 * @author 守鹤
 * @date 2020/5/14 23:14
 */
@Controller
@Validated
public class PlainController {

    @RequestMapping("/plain")
    public String plain(@NotBlank(message = "名字不能为空") String name){
        System.out.println("name="+name);
        return "ok";
    }
}

SpringBoot--SpringBoot 服务端数据校验_第6张图片

  • 可以用异常处理对象处理,比如用局部的,或者全局的,或者其他的…
  • 这里用局部的
/**
 * @author 守鹤
 * @date 2020/5/14 23:14
 */
@Controller
@Validated
public class PlainController {

    @RequestMapping("/plain")
    public String plain(@NotBlank(message = "名字不能为空") String name){
        System.out.println("name="+name);
        return "ok";
    }

    @ExceptionHandler(javax.validation.ConstraintViolationException.class)
    public ModelAndView plainValidation(Exception e){
        ModelAndView view = new ModelAndView();
        view.setViewName("ok");
        view.addObject("plainValidation",e.getMessage());
        return view;
    }
}

SpringBoot--SpringBoot 服务端数据校验_第7张图片

SpringBoot 服务端数据校验 demo

链接:https://pan.baidu.com/s/1ewjz5Xj61inmWL8HM8yeLQ
提取码:rezy

你可能感兴趣的:(Java,SpringBoot,校验,spring,boot,java)