Используйте метод Post jersey-Rest и получите параметры из URL - PullRequest
2 голосов
/ 15 октября 2011

Я хочу развивать отдых api.such как: http://localhost:8080/TestSomeWay/resources/test/create?meg=sadasd&name=sadasd и получить параметры из urlparams exp. "meg" & "name" Я использую Джерси для разработки метода Restful Post это доза не сделать это код:

@POST
@Path("/create")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
@Override
public String create( @FormParam("meg")String megString, @FormParam("name")String nameString) {
   TestUser testUser=new TestUser();
   testUser.setMeg(megString);
   testUser.setName(nameString);
   em.persist(testUser);
   em.flush();
   return testUser.getId().toString();

}

Ответы [ 2 ]

5 голосов
/ 15 октября 2011

Вы, похоже, не понимаете, чего вы пытаетесь достичь, и это проявляется как непоследовательный 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!), поэтому я настроился на возвращение правильного ответа;это немного сложнее, чем обычно, но это совершенно правильно.

0 голосов
/ 15 октября 2011

Вы должны QueryParam вместо FormParam, чтобы получить желаемую функциональность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...