Проблема проверки bean-компонента IBM Websphere 8.5 в ресурсах JAX-RS - PullRequest
0 голосов
/ 30 января 2020

Вот пример кода, который я использую:

@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

1 Ответ

2 голосов
/ 30 января 2020

JAX-RS 1.1 не интегрируется автоматически с Bean Validation, поэтому вам потребуется выполнить собственную проверку (как вы это делали во втором примере).

JAX-RS 2.0 (доступно в WebSphere v9) ) или 2.1 (доступно в WebSphere Liberty) поддерживают автоматическую интеграцию c с проверкой компонентов. Вы можете найти больше информации о этой записи .

Надеюсь, это поможет, Энди

...