Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

200
Views
Validar manualmente con un validador personalizado sin constructor predeterminado

Tengo una validación personalizada con anotaciones como:

 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = UniquePropertyValidator.class) public @interface UniqueProperty { String message() default "sample message"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }

aquí está mi validador:

 public class UniquePropertyValidator extends JdbcDaoSupport implements ConstraintValidator<UniqueProperty, UniquePropertyClass> { @Inject public UniquePropertyValidator(DataSource dataSource) { setDataSource(dataSource); } @Override public void initialize(UniqueProperty property) { } @Override public boolean isValid(UniquePropertyClass propertyClass, ConstraintValidatorContext constraintValidatorContext) { return some boolean; } }

y estoy tratando de usarlo de la siguiente manera:

 SpringValidatorAdapter adapter = new SpringValidatorAdapter(validator); BeanPropertyBindingResult result = new BeanPropertyBindingResult(propertyClass, propertyClass.getClass().getName()); adapter.validate(propertyClass, result, UniquePropertyClass.SomeValidationGroup.class); if (result.hasErrors()) throw new MethodArgumentNotValidException(null, result);

sin embargo, recibo este error:

 HV000064: Unable to instantiate ConstraintValidator: class some.package.UniquePropertyValidator.

Ahora, soy muy consciente de que mi clase de validador no tiene un constructor predeterminado sin ningún parámetro de método. Sin embargo, lo siguiente funciona con la anotación y el validador exactos:

 public someMethod(@Validated(value = UniquePropertyClass.SomeValidationGroup.class) @RequestBody UniquePropertyClass propertyClass)

Lo que estoy preguntando es; ¿Hay alguna forma de validar manualmente sin el constructor predeterminado?

PD: la razón por la que no puedo usar @Validated (el ejemplo de trabajo anterior) es:

Tengo un @PathVariable (digamos id ) y antes de validar el objeto @RequestBody UniquePropertyClass propertyClass , necesito establecer el id del objeto UniquePropertyClass antes de validarlo, ya que no pude encontrar una manera de vincular el @PathVariable en el campo @RequestBody y validarlo en la mosca con @Validated . Entonces, dar una pista sobre cómo hacer que esto funcione también sería una respuesta perfectamente aceptable.

¡Gracias!

about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Cree un constructor predeterminado para UniquePropertyValidator y agregue la anotación @Component. Entonces solo agrega

 @Inject private DataSource dataSource;

para inyectar la fuente de datos en lugar de iniciarla desde Constructor. (Ver más para objetos de cableado automático en el validador )

ACTUALIZAR puede obtener el bean del contexto (consulte Spring get current ApplicationContext )

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!