У нас есть метод ресурса JAX-RS, который обрабатывает запросы GET для нашего ресурса. Этот метод GET в настоящее время не реализован, и мы хотели бы вернуть код ответа, который говорит так.
Изначально мы использовали следующую технику для получения ответа 501:
Response.status (501)
Это приводит к СЕРЬЕЗНЫМ предупреждениям в наших журналах (SEVERE: сопоставленное исключение для ответа: 501), что вызывает недовольство команды QA и нашего менеджера по разработке.
Вот что мы делаем сейчас (чтобы избежать предупреждения):
public class JaxrsResponseStatus501NotImplemented implements StatusType {
public Family getFamily() {
return Family.SERVER_ERROR;
}
public String getReasonPhrase() {
return "Not Implemented";
}
public int getStatusCode() {
return 501;
}
}
И это в методе JAX-RS:
public ResourceDto getResource(@PathParam("resource_id") String resourceId) {
throw new WebApplicationException(Response.status(new JaxrsResponseStatus501NotImplemented()).entity(ERROR_MESSAGE_GET_NOT_IMPLEMENTED).build());
}
Мои вопросы:
1) Почему не определен Response.Status.NOT_IMPLEMENTED? Большинство других типичных ответов определяются библиотекой как константы, но я не вижу 501, предопределенных в версии 1.8, которую я использую.
Я делаю вижу, что он определен в ClientResponse.Status, но у меня сложилось впечатление, что иерархия пакетов com.sun.jersey.api.client предназначена для разработки на стороне клиента. Я даже не думаю, что сейчас вытаскиваю эту банку.
2) Как правильно отправлять ответ 501?
При отсутствии Response.Status.NOT_IMPLEMENTED (или любого другого ответа, у которого нет предварительно определенной константы), является ли способ выше (пользовательское исключение, реализующее StatusType) правильным путем?
3) Когда вы реализуете StatusType (при условии, что вам это необходимо), как вы узнаете, с каким «семейством» связано исключение? Для чего используются семейные ассоциации? Где они используются?
Спасибо!