栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Hibernate Validator动态解析消息参数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Hibernate Validator动态解析消息参数?

IMO,简单的解决方案是创建的自定义实现

javax.validation.MessageInterpolator
。将主要工作委托给Hibernate
Validator
ResourceBundleMessageInterpolator
,并在中进行所需的替换工作
CustomMessageInterpolator


public class CustomMessageInterpolator extends org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator {    private static final Pattern MESSAGE_PARAMETER_PATTERN = Pattern.compile( "(\{[^\}]+?\})" );    @Override    public String interpolate(String message, Context context) {        String resolvedMessage = super.interpolate(message, context);        resolvedMessage = replacePropertyNameWithPropertyValues(resolvedMessage, context.getValidatedValue());        return resolvedMessage;    }    private String replacePropertyNameWithPropertyValues(String resolvedMessage, Object validatedValue) {        Matcher matcher = MESSAGE_PARAMETER_PATTERN.matcher( resolvedMessage );        StringBuffer sb = new StringBuffer();        while ( matcher.find() ) { String parameter = matcher.group( 1 ); String propertyName = parameter.replace("{", ""); propertyName = propertyName.replace("}", ""); PropertyDescriptor desc = null; try {     desc = new PropertyDescriptor(propertyName, validatedValue.getClass()); } catch (IntrospectionException ignore) {     matcher.appendReplacement( sb, parameter );     continue; } try {     Object propertyValue = desc.getReadMethod().invoke(validatedValue);     matcher.appendReplacement( sb, propertyValue.toString() ); } catch (Exception ignore) {     matcher.appendReplacement( sb, parameter ); }        }        matcher.appendTail( sb );        return sb.toString();    }}

@测试

public void validate() {        Configuration<?> configuration = Validation.byDefaultProvider().configure();        ValidatorFactory validatorFactory = configuration.messageInterpolator(new CustomMessageInterpolator()).buildValidatorFactory();        Validator validator = validatorFactory.getValidator();        Product p = new Product();        Category cat = new Category();        cat.setName("s"); //assume specified name is invalid        p.setCategory(cat);        Set<ConstraintViolation<Product>> violations = validator.validate(p);        for(ConstraintViolation<Product> violation : violations) { System.out.println(violation.getMessage());        }    }

输出量

s is a product in the hazardous category list.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号