首页 > 解决方案 > Spring Boot 对象字段属性中的验证顺序

问题描述

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

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.
    }

}

验证将在课堂上发生的方式是什么?验证字段的机制是什么,@NotNull 验证或任何验证是否依赖于 getter 方法来进行验证?他们是否首先调用 setter 方法进行验证?

标签: javahibernatespring-bootvalidation

解决方案


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

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

  2. 验证将在课堂上发生的方式是什么?
    每种绑定机制的验证过程都不同。如果方法参数是 ModelAttribute/request parameter/path variable/Map 等。Spring 对每个方法参数使用不同的参数解析器。如果添加了@Valid,那么它会在参数解析过程中启用验证(注意整个魔术连接的 RequestMappingHandlerAdapter)。

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


推荐阅读