Подтвердить что ты не робот

Как создать Restful web-сервис с входными параметрами?

Я создаю успокоительный веб-сервис, и я хотел знать, как создать службу с входными параметрами, а также как вызвать ее из веб-браузера.

Например

@Path("/todo")
public class TodoResource {
    // This method is called if XMLis request
    @PUT
    @Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public Todo getXML() {
        Todo todo = new Todo();
        todo.setSummary("This is my first todo");
        todo.setDescription("This is my first todo");
        return todo;
    }

и я могу вызвать его, используя http://localhost:8088/JerseyJAXB/rest/todo

и я хочу создать такой метод, как

@Path("/todo")
    public class TodoResource {
        // This method is called if XMLis request
        @PUT
        @Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
        public Todo getXML(String x, String y) {
            Todo todo = new Todo();
            todo.setSummary(x);
            todo.setDescription(y);
            return todo;
        }

В случае веб-сервисов на основе мыла я бы вызвал его так:

http://localhost:8088/JerseyJAXB/rest/todo?x=abc&y=pqr

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

4b9b3361

Ответ 1

Вы можете. Попробуйте что-то вроде этого:

@Path("/todo/{varX}/{varY}")
@Produces({"application/xml", "application/json"})
public Todo whatEverNameYouLike(@PathParam("varX") String varX,
    @PathParam("varY") String varY) {
        Todo todo = new Todo();
        todo.setSummary(varX);
        todo.setDescription(varY);
        return todo;
}

Затем позвоните в службу поддержки с этим URL-адресом. http://localhost:8088/JerseyJAXB/rest/todo/summary/description

Ответ 2

Если вы хотите параметры запроса, используйте @QueryParam.

public Todo getXML(@QueryParam("summary") String x, 
                   @QueryParam("description") String y)

Но вы не сможете отправлять PUT из обычного веб-браузера (сегодня). Если вы укажете URL напрямую, это будет GET.

Философски, похоже, это должен быть POST. В REST вы обычно используете POST для общего ресурса, /todo, где этот ресурс создает и возвращает новый ресурс, или вы перенаправляете выделенный ресурс, например /todo/<id>, для создания и/или обновления.

Ответ 3

В JAX-RS Следующие аннотации для извлечения входных значений, отправленных клиентом.

  • @PathParam
  • @QueryParam
  • @MatrixParam
  • @FormParam

Синтаксис URL-адреса @PathParam

http://localhost:7001//rest/customers/100/Java4s

Синтаксис URL-адреса @QueryParam

http://localhost:7001/.../rest/customers? custNo = 100 & custName = Java4s

Синтаксис URL-адреса

@MatrixParam

http://localhost:7001/.../rest/customers; custNo = 100; custName = Java4s

Синтаксис URL @FormParam

Если у нас есть форма HTML, имеющая два поля ввода и кнопку отправки. Позволяет клиенту вводить эти данные и отправлять веб-службу RESTful. Затем остальные службы будут извлекать эти данные, используя эту аннотацию @FormParam.

Ответ 4

Будьте осторожны. Для этого вам понадобится @GET (не @PUT).

Ответ 5

другой способ сделать - получить UriInfo вместо всего QueryParam

Затем вы сможете получить запросParam по мере необходимости в вашем коде

@GET
@Path("/query")
public Response getUsers(@Context UriInfo info) {

    String param_1 = info.getQueryParameters().getFirst("param_1");
    String param_2 = info.getQueryParameters().getFirst("param_2");


    return Response ;

}

Ответ 6

Вы можете попробовать это... поставить параметры как:
  http://localhost:8080/WebApplication11/webresources/generic/getText?arg1=hello  в вашем браузере...

package newpackage;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;


import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import javax.ws.rs.QueryParam;

@Path("generic")
public class GenericResource {

    @Context
    private UriInfo context;

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

    /**
     * Retrieves representation of an instance of newpackage.GenericResource

     * @return an instance of java.lang.String
     */
    @GET
    @Produces("text/plain")
    @Consumes("text/plain")
    @Path("getText/")
    public String getText(@QueryParam("arg1")
            @DefaultValue("") String arg1) {

       return  arg1 ;  }

    @PUT
    @Consumes("text/plain")
    public void putText(String content) {





    }
}