Как создать веб-сервис Restful с входными параметрами? - PullRequest
18 голосов
/ 22 сентября 2011

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

Например

@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

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

Ответы [ 5 ]

37 голосов
/ 22 сентября 2011

Можно.Попробуйте что-то вроде этого:

@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;

10 голосов
/ 22 сентября 2011

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

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

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

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

2 голосов
/ 20 ноября 2017

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

Тогда вы сможете получить queryParam в соответствии с необходимостью в вашем коде

@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 ;

}
2 голосов
/ 22 сентября 2011

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

0 голосов
/ 07 февраля 2017

Вы можете попробовать это ... поставить параметры как:
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) {





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