es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Añadir la validación de Bean para un Conversor.

Me gustaría usar la validación para un bean convertidor, pero obtengo el siguiente error:

HV000151: Un método que anula otro método no debe redefinir la configuración de restricción de parámetros, pero el método StringToFooConverter#convert(String) redefine la configuración de Converter#convert(Object).
en org.hibernate.validator.internal.metadata.aggregated.rule.OverridingMethodMustNotAlterParameterConstraints.apply(OverridingMethodMustNotAlterParameterConstraints.java:24)
en org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData$Builder.assertCorrectnessOfConfiguration(ExecutableMetaData.java:462)
en org.hibernate.validator.internal.metadata.aggregated.ExecutableMetaData$Builder.build(ExecutableMetaData.java:380)
en org.hibernate.validator.internal.metadata.aggregated.BeanMetaDataBuilder$BuilderDelegate.build(BeanMetaDataBuilder.java:260)
en org.hibernate.validator.internal.metadata.aggregated.BeanMetaDataBuilder.build(BeanMetaDataBuilder.java:133)
en org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.createBeanMetaData(BeanMetaDataManagerImpl.java:206)
en org.hibernate.validator.internal.metadata.BeanMetaDataManagerImpl.getBeanMetaData(BeanMetaDataManagerImpl.java:165)
en org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:267)
en org.hibernate.validator.internal.engine.ValidatorImpl.validateParameters(ValidatorImpl.java:235)

Convertidor:

@Validated
public class StringToFooConverter implements Converter<string, foo=””> {

@Override
public Foo convert( @NotNull final String source ) {
return new Foo( source );
}
}

Configuración:

@Bean
public StringToFooConverter stringToFooConverter() {
return new StringToFooConverter();
}

¿Qué está mal?

EDITAR:

Agregar un ejemplo y lo que he intentado.
https://github.com/MelleD/spring-bean-validation-example

La interfaz y el DTO son generados por el generador de API abierta. Por lo tanto, actualmente no son modificables.</string,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el método StringToFooConverter#convert(String) está redefiniendo la configuración de Converter#convert(Object), lo que viola la restricción de no alterar las restricciones de los parámetros al anular un método. Esto significa que la restricción @NotNull en el parámetro de StringToFooConverter#convert(String) está en conflicto con la configuración del método Converter#convert(Object).

    Para resolver este problema, puedes eliminar la anotación @NotNull en el parámetro y, en su lugar, agregar un validador para Foo en el método convert para garantizar que el objeto convertido sea válido. Esto se vería así:

    public class StringToFooConverter implements Converter<string, foo=""> {
    
        private final Validator validator;
    
        public StringToFooConverter(Validator validator) {
            this.validator = validator;
        }
    
        @Override
        public Foo convert(final String source) {
            Foo foo = new Foo(source);
            Set<><foo>> violations = validator.validate(foo);
            if (!violations.isEmpty()) {
                throw new ConstraintViolationException(violations);
            }
            return foo;
        }
    }
    

    Luego, en su configuración, puedes inyectar el bean del validador y pasarlo al constructor del bean del convertidor:

    @Bean
    public StringToFooConverter stringToFooConverter(Validator validator) {
        return new StringToFooConverter(validator);
    }
    

    Este enfoque garantizará que su convertidor se valide adecuadamente y cumpla con las reglas de validación definidas en su aplicación.</string,>

Comments are closed.