SpringBoot -- 对服务端的实体对象或Controller类中的参数进行数据校验

一、数据校验

      1.数据校验是为了使系统更完整,数据更精确,同时也有利于维护数据的安全性。
      2.数据校验分为两种,一种是对实体对象进行校验,另一种是对Controller中的参数进行校验。
      3.一些常用的Validation注解
注解 作用
@NotNull 对基本数据类型的对象类型做非空校验
@NotBlank 对字符串类型做非空校验
@NotEmpty 对集合类型做非空校验
@Min(value = ) 数据最小不能小于value
@Max(value = ) 数据最大不能大于value

二、对实体对象做数据校验

ValidationMessages.properties:名字不能改变

#UserTbl数据校验
    username.notblank=用户姓名不能为空
    password.notblank=用户密码不能为空

UserTbl

    @NotBlank(message = "{username.notblank}")
    private String username;

    @NotBlank(message = "{password.notblank}")
    @Min(6)
    private String password;

PageController:注入要进行数据校验的实体对象,由于SpringMVC会将该对象放入到model中传递,key的名称会使用该对象的驼峰命名规则,即实体对象第一个字母小写,是为了给html页面传递数据校验的数值。

@Controller
public class PageController {

    @RequestMapping("/{page}")
    public String showPage(@PathVariable String page, UserTbl userTbl){
        return page;
    }
}

UserController:添加@Validated注解,代表数据校验 ,BindingResult : 一个对象可以进行多个校验信息。

    @PostMapping("/addUser")
    @Transactional
    public String addUser(@Validated UserTbl userTbl, BindingResult result){
        if(result.hasErrors()){
            List<ObjectError> list = result.getAllErrors();
            for (ObjectError error : list){
                FieldError fieldError = (FieldError) error;
                String fieldname = fieldError.getField();
                String msg = fieldError.getDefaultMessage();
                System.out.println(fieldname + msg);
            }
            return "addUser";
        }

        this.userService.addUser(userTbl);
        return "redirect:/user/findAllUsers";
    }

addUser.html:需要用 th:errors 标签存储数据校验的信息,同时在属性前面需要指明哪个实体对象。

    <form th:action="@{/user/addUser}" th:method="post" class="w-50 p-3">
        <div class="form-group">
            <label for="exampleInputEmail1">UserNamelabel>
            <input type="text" class="form-control" id="exampleInputEmail1" name="username" ><font color="red"><span th:errors="${userTbl.username}"/>font>
        div>
        <div class="form-group">
            <label for="exampleInputPassword1">Passwordlabel>
            <input type="password" class="form-control" id="exampleInputPassword1" name="password" ><font color="red"><span th:errors="${userTbl.password}"/>font>

        div>
        <div class="form-group form-check">
            <input type="checkbox" class="form-check-input" id="exampleCheck1">
            <label class="form-check-label" for="exampleCheck1">Check me outlabel>
        div>
        <button type="submit" class="btn btn-primary">添加button>
    form>

SpringBoot -- 对服务端的实体对象或Controller类中的参数进行数据校验_第1张图片

三、给Controller中的参数进行校验

      1.在controller上添加注解@Validation
      2.在参数前添加注解如 @NotBlank(message=" ") String name
      3.自定义异常HandlerExceptionResolver对象处理异常,把错误信息传到指定的页面中

GlobalConfiguration:实现 HandlerExceptionResolver 接口

@Configuration
public class GlobalConfiguration implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView mv = new ModelAndView();
        if(e instanceof ConstraintViolationException) {
            mv.setViewName("findUser");
        }
//    两种方式都可以      
//    mv.addObject("errors",e.toString());
      mv.addObject("errors",e.getMessage().split(":")[1]);
        return mv;
    }
}

findUser.html:在输入的表单中添加错误的数据校验信息

    <span th:text="${errors}"/>

你可能感兴趣的:(SpringBoot,数据校验)