【问题标题】:How to configure custom message interpolation with Hibernate?如何使用 Hibernate 配置自定义消息插值?
【发布时间】:2013-08-20 07:58:28
【问题描述】:

我编写自定义消息插值。我希望 JPA 将使用我的自定义消息插值。在这里http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html/validator-bootstrapping.html#section-message-interpolator我找到了以下描述:

Configuration<?> configuration = Validation.byDefaultProvider().configure();
ValidatorFactory factory = configuration
    .messageInterpolator(new ValueFormatterMessageInterpolator(configuration.getDefaultMessageInterpolator()))
    .buildValidatorFactory();

Validator validator = factory.getValidator();

但是我应该在哪里写这样的代码?在 init-servlet 的 web.xml 中?我可以在persistance.xml 中提供这样的代码吗?

附:我复制并粘贴代码。在我的情况下

ValueFormatterMessageInterpolator(configuration.getDefaultMessageInterpolator()))

会有这样的变化

CustomMessageInterpolator(configuration.getDefaultMessageInterpolator()))

另见How do I dynamically resolve message parameters with Hibernate Validator?

【问题讨论】:

    标签: hibernate validation jpa bean-validation hibernate-validator


    【解决方案1】:

    JSR-303 bean 验证框架提供了通过 XML 配置验证框架的可能性。

    例如META-INF/validation.xml

    见章节

    4.4.6。 XML 配置:META-INF/validation.xml

    规范详情:http://download.oracle.com/otndocs/jcp/bean_validation-1.0-fr-oth-JSpec/

    4.4.6。 XML 配置:META-INF/validation.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <validation-config
        xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd">
        <default-provider>com.acme.ACMEProvider</default-provider>
        <message-interpolator>com.acme.ACMEAwareMessageInterpolator</message-interpolator>
        <constraint-mapping>META-INF/validation/order-constraints.xml</constraint-mapping>
        <constraint-mapping>META-INF/validation/catalog-constraints.xml</constraint-mapping>
        <constraint-mapping>META-INF/validation/customer-constraints.xml</constraint-mapping>
        <property name="com.acme.validation.logging">WARN</property>
        <property name="com.acme.validation.safetyChecking">failOnError</property>
    </validation-config>
    

    用你的持久化 jar (META-INF/validation.xml) 打包 xml 文件,它应该可以工作。

    根据您的部署包(例如 EAR),可能需要将其放在 EAR 的 lib 文件夹中的共享库中。

    休眠文档说:

    为 Hibernate Validator 启用 XML 配置的关键是 文件验证.xml。如果该文件存在于类路径中 将在创建 ValidationFactory 时应用配置。 例 4.1,“validation-configuration-1.0.xsd”显示了一个模型视图 xsd valiation.xml 必须遵守。

    http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html_single/#d0e1867

    【讨论】:

    • 我怎样才能用 JPA/Hibernate 做到这一点?
    • 我已经更新了我的答案。我认为您只需将它放在类路径上,它就会被验证框架拾取。尽管如此,您仍然可以创建验证器并覆盖 xml 配置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2012-03-03
    • 2019-01-14
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    相关资源
    最近更新 更多