Я сталкиваюсь с действительно необъяснимой ошибкой при использовании сервера Dropwizard с пользовательскими ресурсами JAX-RS, зарегистрированными на сервере Джерси. Следующее верно:
- Скручивание несуществующей конечной точки дает 404, как и ожидалось.
- Скручивание существующей конечной точки неверным методом (например, POST вместо GET) дает 405, как и ожидалось.
- При скручивании существующей конечной точки правильным методом выдается сообщение «Не удалось найти диапазон для текущего запроса».
- Мой код обработчика конечной точки никогда не затрагивается, что можно проверить, установив точки останова в коде.
- Удивительно, но если я переместил всю аннотацию пути на свой метод-обработчик, а не частично на весь класс, я получу вместо этого 404.
Вот пример формата, который выдает странное сообщение об ошибке:
@Produces({MediaType.APPLICATION_JSON})
@Path("application/api/v1/")
public class GetConfigurationResource extends MyResource<Arg, Result> {
@GET
@Path("getConfiguration/{uuid}")
public Response handleHttpRequest(
@Context HttpHeaders headers, @Context UriInfo uriInfo, @PathParam("uuid") String uuid) {
return super.handleHttpRequest(headers, new Arg(), new Result());
}
}
Вот пример, который дает 404:
@Produces({MediaType.APPLICATION_JSON})
public class GetConfigurationResource extends MyResource<Arg, Result> {
@GET
@Path("application/api/v1/getConfiguration/{uuid}")
public Response handleHttpRequest(
@Context HttpHeaders headers, @Context UriInfo uriInfo, @PathParam("uuid") String uuid) {
return super.handleHttpRequest(headers, new Arg(), new Result());
}
}
Вот команда curl:
curl -X GET http://127.0.0.1:8080/application/api/v1/getConfiguration/5
Я могу воспроизвести эту ошибку даже при использовании игрушечных классов, подобных этой, в моем приложении. Каждая конечная точка дает одинаковый результат.
Простой поиск в Google сообщения об ошибке абсолютно не дает результатов. Так что это похоже на совершенно новую ошибку. Мне интересно, что может вызвать что-то подобное, и как я могу отладить это в Dropwizard / Jersey.