zoukankan      html  css  js  c++  java
  • Spring MVC中Validation参数校验踩坑总结

    1. maven依赖配置不全导致@NotNull、@NotBlank、@NotEmpty不生效

    解决方法:在web层引入以下依赖:

    • validation-api.jar (contains the abstract API and the annotation scanner)
    • hibernate-validator.jar (contains the concrete implementation)
    • slf4j-api.jar (just to get its logger to work as well)
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.1.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.0-alpha1</version>
    </dependency>
    

    我在编写的时候就是少了第三个依赖,导致LocalDate类型的参数可以被@NotNull检验,而String类型的参数均不能被这三者检验。直到上Stack Overflow才解决这个问题。

    2. 没有开启@Valid注解导致@NotNull、@NotBlank、@NotEmpty不生效

    解决方法:在控制器参数中开启@Valid注解,并用BindingResult接收错误信息:

    @RequestMapping("/add")
    public String add(@Valid Reservation RESERVATION, BindingResult result, ...) {
        if (result.hasErrors()) {
    	Map<String, String> err = new HashMap<String, String>();
    	List<FieldError> list = result.getFieldErrors();
    	FieldError error = null;
    	for (int i = 0; i < list.size(); i++) {
    		error = list.get(i);
    		err.put(error.getField(), error.getDefaultMessage());
    	}
    	//仍在request中,jsp页面可以直接获取。
    	request.setAttribute("errfields", err);
        }
        ...
    }
    

    3. 参数中BindingResult没有紧跟在开启验证的实体类后面书写导致400错误

    错误范例:

    @RequestMapping("/add")
    public String add(@Valid Reservation RESERVATION,..., BindingResult result, ...) {
    }
    

    注意:实体类和BindingResult类这两个参数中间不能有其他参数,否则会产生400 Bad Request错误。

  • 相关阅读:
    FreeSWITCH第三方库(视频)的简单介绍(二)
    FreeSWITCH第三方库(音频)的简单介绍(一)
    libreoffice实现WORD文档转PDF文档
    Linux TOP命令详解
    java内存泄漏
    FreeSWITCH的传真发送
    CPU的一些参数和排名
    设计模式(九)访问者模式
    设计模式(八)状态模式
    使用PermissionsDispatcher轻松解决Android权限问题
  • 原文地址:https://www.cnblogs.com/lxy764139720/p/12327358.html
Copyright © 2011-2022 走看看