Closed ma-santamaria closed 6 years ago
Buenos días,
Necesitaría ver, como estas realizando la llamada para poder hacer la simulación.
Un saludo.
Buenos días,
añado un ejemplo que permite observar el comportamiento descrito:
BeanValidado.java:
@CheckEsElDoble
public class BeanValidado {
private int unNumero;
private int otroNumero;
public BeanValidado() {
}
public int getUnNumero() {
return unNumero;
}
public void setUnNumero(int unNumero) {
this.unNumero = unNumero;
}
public int getOtroNumero() {
return otroNumero;
}
public void setOtroNumero(int otroNumero) {
this.otroNumero = otroNumero;
}
}
CheckEsElDoble.java:
@Target({ TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = { EsElDobleValidator.class })
@Documented
public @interface CheckEsElDoble {
String message() default "otro no es el doble de uno";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
EsElDobleValidator.java
public class EsElDobleValidator implements ConstraintValidator<CheckEsElDoble, BeanValidado> {
@Override
public void initialize(CheckEsElDoble constraintAnnotation) {
}
@Override
public boolean isValid(BeanValidado value, ConstraintValidatorContext constraintContext) {
if (value == null) {
return true;
}
return value.getOtroNumero() == value.getUnNumero() * 2;
}
}
ValidameController.java:
@Controller
@RequestMapping(value = "/validame")
public class ValidameController {
@Autowired
private ValidationManager validationManager;
@RequestMapping(value = "/manual", method = RequestMethod.GET)
public ResponseEntity<Boolean> pruebaValidacionManual(BeanValidado beanValido) {
Errors errors = new BeanPropertyBindingResult(beanValido, "beanValido");
validationManager.validate(errors, beanValido);
return new ResponseEntity<Boolean>(!errors.hasErrors(), HttpStatus.OK);
}
}
validationManager está definido de la siguiente manera en validation-config.xml
:
<bean id="validationManager" class="com.ejie.x38.validation.ValidationManager" />
Si se realiza la siguiente llamada <servidor app>/validame/manual?unNumero=2&otroNumero=5
se puede observar el comportamiento indicado.
Saludos.
Hola,
Siguiendo el mismo ejemplo el validator me funciona correctamente, igual no tienes actualizado la última versión de x38.
Un saludo.
Hola,
actualmente estamos usando la versión 3.5; pero como comentaba al abrir la incidencia también hemos comprobado este comportamiento con la 3.2
El comportamiento erróneo se da cuando falla la validación; por ejemplo con otroNumero=5
y unNumero=2
. En caso de que no falle no hay problema (por ejemplo con otroNumero=4
y unNumero=2
), ya que no se intenta asociar los errores a ninguna propiedad del bean.
Saludos.
Correcto ya lo he visto en la siguiente versión estará corregido.
Un saludo
En la versión 3.2.0 de UDA, si se intenta validar un bean que tenga restricciones a nivel de clase se produce el siguiente error:
El origen del error reside en que la propiedad name de
javax.validation.Path.Node
es null para el objeto raíz; pero el métodocom.ejie.x38.validation.ValidationManager.validate
convierte directamente dicho valor a String (de manera implícita por la concatenación que realiza).Posteriormente esto provoca que el mismo método
com.ejie.x38.validation.ValidationManager.validate
trate de asociar el error de validación a la propiedad "null", que no existe en el bean validado, mediante la invocación arejectValue
.