Я думаю, что Клаудио прав - вы могли бы использовать Джерси, но вы были бы сами по себе, чтобы обрабатывать параметры запроса, так как он соответствует только пути.
Вы можете ввести UriInfo и вытащить параметры запроса из этого:
@Path("/operation") public class Operation { @Context protected UriInfo info; @GET public String operation() { if (info.getQueryParameters().containsKey("create")) // do stuff else if (info.getQueryParameters().containsKey("info")) // other stuff }
}
blockquote>Вы можете переключиться с Джерси на другую структуру. Я считаю, что Spring может маршрутизировать несколько методов на основе параметров запроса.
Как вы уже упоминали, возможно, вы могли бы написать что-то более стандартное, а затем переназначить запросы на это , Например, для изменения запроса можно использовать фильтр Servlet или внешний сервер, например Apache httpd или nginx.
Мышление в терминах ресурсов что это за действия? Учетные записи клиентов, фильмы, биржевые торги и т. Д. Для аргументов, скажем, это «Foo». Вы можете пойти с чем-то вроде этого:
@Path("/foo") public class FooResource { @Context protected UriInfo info; @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Foo getById(@QueryParam("id") int id) { // get Foo by id Foo = .... // return an instance of Foo and let Jersey convert it to XML // or JSON depending on the "Accept" header that the client sent return foo; } @POST @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response create(Foo instance) { // let Jersey deserialize the request body from JSON or XML. // save the instance however you want int id = fooService.save(instance); // return a 204 "created" with a "Location" header URI location = info.getAbsolutePathBuilder().path("{id}").build(id); return Response.created(location).build(); }
}
blockquote>Кажется, что ваша структура URI задана кем-то другим, поэтому это может быть не вариант для вас. Если вы выполняете текущую структуру URI, есть одна серьезная ошибка, о которой вы должны знать.
В соответствии с спецификацией HTTP 1.1 , запросы GET должны быть idempotent . Похоже, что ваш текущий проект создает новые экземпляры на стороне сервера с запросами GET. Существует потенциал для поломки ... промежуточные прокси или веб-браузеры могут кэшировать ответы на ваши запросы GET и предотвращать создание новых экземпляров.