Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java的自定义注释中,组和负载有什么用途?_Java_Spring_Spring Mvc_Annotations - Fatal编程技术网

在Java的自定义注释中,组和负载有什么用途?

在Java的自定义注释中,组和负载有什么用途?,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,这是我的密码, 我试着在网上读很多东西,但无法理解它的实际用途 Class<?> [] groups() default{}; Class<? extends Payload>[] payload() default{}; Class[]groups()默认值{}; 类[]组()默认值{}; 类组允许您限制验证期间应用的约束集。 在下面的示例中,AClass类具有属于AGroup组的bool属性。但是,如果未指定属性的组(如AClass的其他属性),则它属于默认组jav

这是我的密码, 我试着在网上读很多东西,但无法理解它的实际用途

Class<?> [] groups() default{};
Class<? extends Payload>[] payload() default{};
Class[]groups()默认值{};
类[]组()默认值{};
类组允许您限制验证期间应用的约束集。
在下面的示例中,
AClass
类具有属于
AGroup
组的
bool
属性。但是,如果未指定属性的组(如
AClass
的其他属性),则它属于默认组
javax.validation.groups.default

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;

public class AClass {

    @NotBlank
    private String string;

    @Min(2)
    private int integer;

    @AssertTrue(groups = AGroup.class)
    private boolean bool;

    public AClass(String string, int integer, boolean bool) {
        this.string = string;
        this.integer = integer;
        this.bool = bool;
    }
}
组声明可以是简单的空接口

public interface AGroup { }
在下面的程序中,
validate
方法验证属于默认组的所有属性。但要验证其他组的属性,必须在
validate
方法中指定要验证的属性组

import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.junit.Assert;

public class Program {

    public static void main(String[] args) {
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

        // create a AClass and check that everything is ok with it.
        AClass a = new AClass("Foo", 2, false);
        Set<ConstraintViolation<AClass>> constraintViolations = validator.validate(a);
        Assert.assertEquals(0, constraintViolations.size());

        // but has it passed the bool field?
        constraintViolations = validator.validate(a, AGroup.class);
        Assert.assertEquals(1, constraintViolations.size());
        Assert.assertEquals("must be true", constraintViolations.iterator().next().getMessage()
        );
    }
}
执行
ErrorEmailSender
有效负载:

import javax.validation.ConstraintViolation;
import javax.validation.Payload;

public class ErrorEmailSender implements Payload {

    public void onError(ConstraintViolation violation) {
        System.out.println("Sending email to support team: "
                + violation.getPropertyPath() + " "
                + violation.getMessage());
    }
}
Client
程序检查
TestBean
实例是否有效,如果无效,则调用无效属性的
Payload

import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

public class Client {

    public static void main(String[] args) {
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

        TestBean bean = new TestBean();
        Set<ConstraintViolation<TestBean>> constraintViolations = validator.validate(bean);

        if (constraintViolations.size() > 0) {
            constraintViolations.stream().forEach(Client::processError);
        } else {
            //proceed using user object
            System.out.println(bean);
        }
    }

    private static void processError(ConstraintViolation<TestBean> violation) {
        violation.getConstraintDescriptor().getPayload().forEach(p -> {
            if (ErrorEmailSender.class.isAssignableFrom(p)) {
                try {
                    ((ErrorEmailSender) p.getDeclaredConstructor().newInstance()).onError(violation);
                } catch (Exception ex) {
                    System.out.println(ex);
                }
            }
        });
    }
}
资料来源:

import javax.validation.ConstraintViolation;
import javax.validation.Payload;

public class ErrorEmailSender implements Payload {

    public void onError(ConstraintViolation violation) {
        System.out.println("Sending email to support team: "
                + violation.getPropertyPath() + " "
                + violation.getMessage());
    }
}
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;

public class Client {

    public static void main(String[] args) {
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

        TestBean bean = new TestBean();
        Set<ConstraintViolation<TestBean>> constraintViolations = validator.validate(bean);

        if (constraintViolations.size() > 0) {
            constraintViolations.stream().forEach(Client::processError);
        } else {
            //proceed using user object
            System.out.println(bean);
        }
    }

    private static void processError(ConstraintViolation<TestBean> violation) {
        violation.getConstraintDescriptor().getPayload().forEach(p -> {
            if (ErrorEmailSender.class.isAssignableFrom(p)) {
                try {
                    ((ErrorEmailSender) p.getDeclaredConstructor().newInstance()).onError(violation);
                } catch (Exception ex) {
                    System.out.println(ex);
                }
            }
        });
    }
}
Sending email to support team: str must not be null