ValidationError в клиенте Джерси?

У меня возникли проблемы с получением 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":""}]

person TinusSky    schedule 09.09.2014    source источник


Ответы (1)


Отвечаю на свой вопрос ;-)

Кажется, что клиент из трикотажа не поддерживает ошибки проверки, поэтому я создал фильтр клиента, и когда статус равен 400, я получаю объект и помещаю ошибки проверки в список. Затем я создаю исключение проверки, которое включает ошибки проверки, и просто бросаю его. Немного дальше по цепочке я получаю исключение обработки, в трассировке стека можно найти исключение проверки, а также ошибки проверки. Итак, я создаю красивое сообщение из ошибок проверки и выбрасываю другое исключение, вплоть до моего кода графического интерфейса, который просто отображает сообщение об исключении.

Работает отлично, спасибо трикотажу за гибкость фильтров!

person TinusSky    schedule 10.09.2014