gpt4 book ai didi

java - 在自定义创建的约束中添加属性时,JacksonPropertyNodeNameProvider 未选取正确的值

转载 作者:行者123 更新时间:2023-12-01 17:50:19 24 4
gpt4 key购买 nike

我使用 JacksonPropertyNodeNameProvider 使用实际的 json 字段名称而不是 java 类字段名称(即 account_id 而不是 accountId)来呈现错误。我添加了一个自定义约束,因为我想在多个字段上进行验证。当我添加自定义错误时

context.buildConstraintViolationWithTemplate("customField is a mandatory unique attribute")
.addPropertyNode("customField").addBeanNode().addConstraintViolation();

它只是在错误中返回 customField 而不是 custom_field。如果我尝试将 PropertNode 设置为 custom_field,则 ISE 会出错。我是否需要设置一些配置或需要执行其他操作才能使其正常工作?这就是我初始化 validator 的方式。

@Bean
public Validator validator(@Autowired ObjectMapper objectMapper) {
JacksonPropertyNodeNameProvider propertyNodeNameProvider = new JacksonPropertyNodeNameProvider(objectMapper);
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
.propertyNodeNameProvider(propertyNodeNameProvider)
.buildValidatorFactory();
return validatorFactory.getValidator();
}

最佳答案

我找到了这个way定制PropertyNodeNameProvider 。我正在使用 Spring Boot 2.5.2,并且 org.springframework.validation.beanvalidation.SpringValidatorAdapter#getRejectedValue 没有任何问题。然而,方式PropertyNodeNameProvider定制可以改进,因为当你生成org.springframework.validation.beanvalidation.LocalValidatorFactoryBean的定制bean时,您将丢失 org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration 所做的配置。您可以通过创建代理类 org.springframework.validation.beanvalidation.LocalValidatorFactoryBean 来解决此问题,但是您需要重写所有方法并将所有调用委托(delegate)给原始实例,这将是一个冗长的解决方案。我认为最好的方法是通过接口(interface)而不是 org.springframework.validation.beanvalidation.LocalValidatorFactoryBean 内的 protected 方法,这样定制就会很简单,自动配置由 org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration 进行。不会丢失。您认为值得为此创建一个问题吗?

关于java - 在自定义创建的约束中添加属性时,JacksonPropertyNodeNameProvider 未选取正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60809437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com