首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javax.validation.Payload在Bean验证API中的用例是什么?

javax.validation.Payload在Bean验证API中的用例是什么?
EN

Stack Overflow用户
提问于 2019-11-24 13:51:41
回答 1查看 6.2K关注 0票数 6

Bean验证规范定义:

约束注释必须定义一个有效负载元素,该元素指定与约束声明相关联的有效负载。有效载荷参数的类型是Payload[]。 Class<?扩展Payload>[]有效载荷()默认{}; 默认值必须为空数组。 每个可附加的有效载荷都扩展了Payload。 /** *有效载荷类型,可以附加到给定的*约束声明。**有效载荷通常用于进行验证客户端使用的元数据信息*。**有效载荷的使用被视为不可携带。*/

我读过它的例子,但我不明白,例如,我如何在JSF中使用这个元数据?你能解释现实世界中有效载荷的其他用例吗?有效载荷携带的元数据是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 12:20:30

也许这个链接能帮你。

代码语言:javascript
运行
复制
import javax.validation.*;
import javax.validation.constraints.NotNull;
import java.util.Set;

public class ConstraintPayloadExample2 {
    private static final Validator validator;

    static {
        Configuration<?> config = Validation.byDefaultProvider().configure();
        ValidatorFactory factory = config.buildValidatorFactory();
        validator = factory.getValidator();
        factory.close();
    }

    public interface AppErrorHandler<T> extends Payload {
        void onError (ConstraintViolation<T> violation);
    }

    public static class ErrorEmailSender<T> implements AppErrorHandler<T> {
        @Override
        public void onError (ConstraintViolation<T> violation) {
            System.out.println("Sending email to support team: " +
                                violation.getPropertyPath() + " " +
                                violation.getMessage());
        }
    }

    public static class TestBean {

        @NotNull(payload = {ErrorEmailSender.class})
        private String str;

        public String getStr () {
            return str;
        }

        public void setStr (String str) {
            this.str = str;
        }
    }

    public static void main (String[] args) {
        TestBean bean = new TestBean();

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

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


    private static void processError (ConstraintViolation<TestBean> violation) {
        Set<Class<? extends Payload>> payload =
                            violation.getConstraintDescriptor().getPayload();

        payload.forEach(p -> {
            if (AppErrorHandler.class.isAssignableFrom(p)) {
                try {
                    AppErrorHandler errorHandler = (AppErrorHandler) p.newInstance();
                    errorHandler.onError(violation);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59018356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档