2011-12-22 2 views
3

Итак, у меня есть сервис службы REST с Джерси.Пользовательские сообщения об ошибках для проверки ошибок в Джерси/JAXB

Мой POJO просто аннотированный, как @XmlRootElement

Я посылаю запрос POST к моей службе REST и все работает отлично.

1- Я отправляю неверный XML-код на службу. Я возвращаю страницу 400 по умолчанию с неудовлетворительными запросами контейнеров. Использование Glassfish 3 Я не могу точно помнить, но я знаю, что могу изменить или сказать, что мое веб-приложение подходит для моего собственного 400-и плохого запроса? Где я могу искать документы по этому конкретному вопросу.

2- Я отправляю действительный XML, но в одном из ожидаемых полей я ставлю пустое значение. Мой сервис пытается что-то сделать, и он выдает исключение персистентности. Я возвращаю страницу контейнера по умолчанию 500 Internal Server Error и перечисляет исключенное исключение. Наверное, я могу сопоставить и свою собственную страницу с ошибками, но я просто не хочу показывать сообщение об исключении. Это считается проблемой безопасности.

В основном я хотел бы проверить поля самостоятельно на основе моей бизнес-логики и возвращать клиенту сообщение об ошибке, такое как «Поле1 недействительно». Ничто больше ничего. И клиент должен иметь возможность анализировать код ошибки, а также знать, какое поле было неправильным.

Также, что я могу сделать, когда моя служба имеет более одного типа ошибки с неправильным запросом? Например, поле может ожидать значение INT между 1-3, но конкретный бизнес-запрос ожидает значения 2 и 3 отправляется.

Итак, для проверки типа/значения Я хочу просто сказать «Недопустимое имя поля здесь». Но для конкретной бизнес-логики говорят, например, «Недопустимая учетная запись» или «Учетная запись истекло» или «Адрес не соответствует» и т. Д. ...

Или как насчет того, когда у меня более 1 кода успеха?

В основном я беру старый сервис типа «xml» и конвертирую в стиль REST для подтверждения концепции и доведения ее до стандартов. Старая часть - это 100% POST, даже когда «запрашивать результаты. Т.е.: GET. Так что в основном вы POST к нему XML, он читает XML, называет бизнес-логику и логику возвращает соответствующий код в ответе XML. HTTP 200 OK и код бизнес-логики возвращаются в ответе XML. Таким образом, единственный раз, когда клиент получает ошибку 500, возникает сложный сбой, когда служба не может выполнить ответ XML. Даже недопустимый XML возвращается как 200 OK , но ответ ответа XML указывает на это с моими собственными кодами ошибок.

A a back назад Мне предлагалось использовать SOAP для более ориентированных на «сообщение» сервисов, но я все еще думаю, что это тяжело, и я могу добиться с помощью REST, что мой службы, хотя мне не нужна большая часть REST?

ответ

3

Вы можете отображать исключения из HTTP re sponses использованием ExceptionMappers - см: http://jersey.java.net/nonav/documentation/1.11/jax-rs.html#d4e433 http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/ext/ExceptionMapper.html

Если вы хотите сделать проверку, прежде чем запрос достигает даже метод ресурса, вы можете попробовать написать ContainerRequestFilter для этого и бросить WebApplicationException, который принимает отклик в качестве параметра - джерси автоматически отображает это исключение для ответа, с которым он был инициализирован.

+0

Спасибо, я попробую. Но у меня есть еще несколько вопросов. Я обновил главный вопрос. – user432024

Смежные вопросы