Вызов веб-службы RESTful с параметром

У меня есть простой веб-сервис RESTful, который печатает "Hello World!" Я использую NetBeans, и код выглядит следующим образом:

package resource;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;


@Path("simple")
public class SimpleResource {

    @Context
    private UriInfo context;

    /** Creates a new instance of SimpleResource */
    public SimpleResource() {
    }

    @GET
    @Produces("application/xml")
    public String getXml() {
        //TODO return proper representation object
        return "<greeting>Hello World !</greeting>";
    }

    @PUT
    @Consumes("application/xml")
    public void putXml(String content) {
    }
}

Я вызываю эту веб-службу по этому URL-адресу: http://localhost:8080/WebService/resources/simple. Теперь я хочу отправить параметр этой веб-службе, а затем напечатать этот параметр после сообщения "Hello world".

Как мы можем это сделать?

Спасибо!

Ответ 1

Два основных способа обработки параметра в REST - это разбор пути и извлечение части запроса.

Параметры пути

Они обрабатывают этот случай - /foo/{fooID} - где {fooID} - это шаблон, который будет заменен требуемым параметром:

@GET
@Produces("text/plain")
@Path("/foo/{fooID}")
public String getFoo(@PathParam("fooID") String id) {
    // ...
}

Это отлично подходит для случая, когда вы можете рассмотреть параметр, описывающий ресурс.

Параметры запроса

Они обрабатывают этот случай - /?foo=ID - точно так же, как вы делали традиционную обработку формы:

@GET
@Produces("text/plain")
@Path("/")
public String getFoo(@QueryParam("foo") String id) {
    // ...
}

Это отлично подходит для случая, когда вы рассматриваете параметр для описания вспомогательного элемента ресурса, а не самого ресурса. Аннотация @FormParam очень похожа, за исключением того, что она предназначена для обработки POST-формы вместо параметров стиля GET.

Другие типы параметров

Существуют и другие типы обработки параметров, поддерживаемые спецификацией JAX-RS (параметры матрицы, параметры заголовка, параметры файлов cookie), которые все работают примерно одинаково с программистом, но реже или более специализированы в использовании. Разумным местом для начала изучения деталей является JAX-RS javadoc, поскольку у этого есть полезные ссылки.

Ответ 2

Пример кода для веб-службы, которая принимает параметры в URl, будет выглядеть так:

@GET
@Path("/search")
public String getUserDetailsFromAddress(
              @QueryParam("name") String name) {
  return "Hello"+name;
}

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

http://localhost:8080/searchapp/mysearch/search?name=Tom

Ответ 3

Попробуйте добавить аннотацию Path следующим образом:

@javax.ws.rs.Path("/bookstore/books/{bookId}")