2014-09-09 4 views
0

У меня есть GET request url entities\{id}. Здесь RestController ожидает идентификатор в формате Long.
Тестовая версия говорит, что если пользователь проходит недействительный id, контроллер должен вернуть ошибку HTTP-400 Bad Request. Например: /entities/21.0, /entities/xx и т.д.
Но прежде, чем поразить сам контроллер Джерси бросает ошибку HTTP-404.ОТДЫХ: Обработка ошибки 400 для запросов GET

RestController выглядит следующим образом:

@GET 
@Path("/{id}") 
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) 
public Response getEntityById(@PathParam("id") Long id){} 
+0

Сам метод не аннотирован? – Fildor

+0

Я только что положил подпись метода, чтобы показать, как она читает id. Обновление сейчас. –

+0

Не могли бы вы предоставить конфигурацию вашего контекста вместе с целым классом. Это единственная недостижимая конечная точка? Я имею в виду? – tmarwen

ответ

1

Оговорка: Это не большое решение, но это решение функционирования.

Во-первых: Я считаю, что @PathVariable - это правильная аннотация, а не @PathParam (я читаю ссылку на весну 3.2).

  1. Изменение типа параметра идентификатор строки
  2. в методе сделать Long.parseLong (ID) и поймать NumberFormatException.
  3. Возвращает желаемую индикацию ошибки для исключения NumberFormatException.
+0

Спасибо. Я сделал то же самое. Ищете более чистое решение здесь. Попытка/улов в классе контроллера выглядит не очень хорошо. –

+0

Upvote для предложения '@ PathVariable'. –

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