繁体   English   中英

Spring Boot object 字段属性中的验证顺序

[英]The order of validation in Spring Boot object field properties

假设我有一个 class,SpringBoot class object 中的验证顺序是什么。 在创建 object 之后,填充字段或在填充对象之前进行验证,在设置字段值时进行此验证。 或者在创建 object 之后,通过 get 调用我们验证 object 字段值。

package com.bablo.google.request;

import java.io.Serializable;

import java.util.Set;

import javax.validation.constraints.NotNull;

public class SomeRequest implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @NotNull
    private Long userId;

    private String resNote; //this is not annotated with @NotNull
    @NotNull
    private String revTag;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(final Long userId) {
        this.userId = userId;
    }

    public String getResNote() {
        return responseNote;
    }

    public void setResNote(final String resNote) {
        this.resNote = resNote.trim();    //Call to trim() method of the String object.
    }

    public String getRevTag() {
        return revTag;
    }

    public void setRevTag(final String revTag) {
        this.revTag = revTag.trim();     //Call to the trim() method of the String object.
    }

}

class 中的验证方式是什么? 验证字段的机制是什么,@NotNull 验证或任何验证是否依赖于 getter 方法来进行验证? 他们是否首先调用 setter 方法进行验证?

拆分您的问题并添加答案。

  1. SpringBoot class object 中的验证顺序是什么?
    验证作为数据绑定过程的一部分发生。 每个请求参数/路径变量都将根据标记的注释进行验证,只有当验证通过时,该值才会分配给 class object。

  2. class 中的验证方式是什么?
    每种绑定机制的验证过程都不同。 如果方法参数是 ModelAttribute/请求参数/路径变量/Map 等。Spring 对每个方法参数使用不同的参数解析器。 如果添加了@Valid,那么它会在参数解析过程中启用验证(注意整个魔术连接的 RequestMappingHandlerAdapter)。

  3. @NotNull 验证或任何验证是否依赖于 getter 方法来进行验证? 他们是否首先调用 setter 方法进行验证?
    Spring 使用反射构造/验证方法参数 class。 即使没有 getter/setter,数据绑定和验证也会发生。

您可以通过调用手动验证

@Autowired
private javax.validation.Validator validator;

...
validator.validate(new SomeRequest()); // you can also pass method's argument

或者您可以使用自动验证

  1. 这是使用@Valid + @ExceptionHandler 的示例https://www.baeldung.com/spring-boot-bean-validation
  2. 这是使用@Valid + BindingResult的示例https: //spring.io/guides/gs/validating-form-input/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM