Вы, похоже, не понимаете, чего вы пытаетесь достичь, и это проявляется как непоследовательный API.Как только вы пошли не так, неудивительно, что все идет не так!
Во-первых, вы должны выяснить, используете ли вы GET, PUT или POST, и в последних двухслучаях, какой тип контента (или типы) вы потребляете, так как PUT и POST обычно имеют дело с входящим документом.Более того, если вы делаете что-то, что не идемпотентно (то есть, чтобы оно было «одинаковым», если вы делали это два раза подряд, как если бы один раз), тогда вам определенно следует использовать POST;классический пример - оплата некоторых товаров, которые вы определенно не хотите делать дважды, тогда как установка ваших предпочтений может быть идемпотентной.Последнее осложнение заключается в том, что обычно неправильно смешивать параметры запроса с телом;либо параметры находятся в части запроса, либо они находятся в теле (или они находятся в пути, но в этом случае вы имеете дело с различными ресурсами концептуально).
Если вы просто имеете дело с HTMLформы, два стиля метода, который вам нужен, будут выглядеть так:
@GET
@Path("/create")
@Produces(MediaType.TEXT_PLAIN)
public String createFromGet(
@QueryParam("meg") String meg,
@QueryParam("name") String name) {
...
return theString;
}
@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public Response createFromPost(
@FormParam("meg") String meg,
@FormParam("name") String name) {
...
return Response.created(theNewUrl).entity(theString).build();
}
Первый имеет дело с GET на URL-адресе, подобном /create?meg=foo&name=bar
, а второй - с POST дляURL, как /create
.Однако, учитывая имя «create», у меня возникнет соблазн просто использовать версию POST и не пытаться поддерживать кодирование параметров в части запроса;создание - это одна из тех вещей, которые, как правило, не являются идемпотентными.
Обратите внимание, что я предположил, что ваше создание создает ресурс (это хорошее программирование RESTful!), поэтому я настроился на возвращение правильного ответа;это немного сложнее, чем обычно, но это совершенно правильно.