Вот пример кода, который я использую:
@Stateless
@Path("/rest")
public class MyResouce{
@POST
@Path("/test")
public Response test(@Valid Test t){
return Response.ok().build();
}
}
public class Test {
@Size(max = 3)
private String val;
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
}
Я ожидаю исключение ValidationException, когда я передаю недопустимый объект (длина val больше 3), но исключение не происходит. Когда я внедряю валидатор и выполняю валидацию программно:
@Path("/rest")
public class MyResouce{
@Resource
private Validator validator;
@POST
@Path("/test")
public Response test(@Valid Test t){
Set<ConstraintViolation<Test>> violations = validator.validate(t); // size = 1, means t object is invalid
return Response.ok().build();
}
}
результат валидации имеет 1 элемент ConstraintViolation, что означает, что объект недействителен, и похоже, что аннотация @Valid игнорируется. Как проверить объекты не программно? Вот мое подтверждение. 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">
</validation-config>
Websphere версия 8.5.5.11, JAX-RS 1.1