У меня возникли проблемы с получением ValidationErrors из ресурса трикотажа в клиенте трикотажа. Позволь мне объяснить.
Функция в трикотажном ресурсе:
@POST
@Produces({ MediaType.APPLICATION_JSON })
@Consumes(MediaType.APPLICATION_JSON)
public LoginInfo login(@NotNull @Valid Login login)
Мой конфиг клиента:
ClientConfig clientConfig = new ClientConfig();
clientConfig.register(JacksonFeature.class);
Мой трикотажный клиент:
ClientBuilder.newClient(getClientConfig())
И мой вызов функции:
getTarget("/login").request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(login), LoginInfo.class);
Все работает без проблем, пока я указываю допустимые параметры, когда я, например, указываю null в качестве параметра, я получаю исключение:
HTTP 400 Bad Request
Но я ожидаю ответа ValidationError, потому что проверка bean-компонента не удалась.
Проверка бина и ответ на ошибку работают на сервере, например, с помощью простого html-теста, который показывает структуру validationerror:
<div class="validation-errors"><div class="validation-error"><span class="message">may not be null</span> (<span class="path"><strong>path</strong> = LoginResource.login.arg0</span>, <span class="invalid-value"><strong>invalidValue</strong> = null</span>)</div></div>
Как мне получить ValidationError в моем клиенте джерси? Может быть, мне нужно настроить его особым образом или, может быть, я должен использовать фильтр?
[править] Я включил трассировку, и когда проверка не проходит на сервере, сервер отправляет ошибки проверки, но кажется, что клиент трикотажа ничего с этим не делает, он преобразует его в BadRequestException.
6 < 400
6 < Content-Type: application/json
6 < Vary: Accept
[{"message":"may not be empty","messageTemplate":{org.hibernate.validator.constraints.NotBlank.message}","path":"RuleResource.add.arg0.description","invalidValue":""}]