Создайте несколько сопоставлений GET на одном и том же @Path [дубликат]

просто используйте: он выберет столбец b и c.

df1=pd.DataFrame()
df1=df[['b','c']]

, тогда u может просто вызвать df1:

df1
1
задан Isabi 20 May 2014 в 16:48
поделиться

3 ответа

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

Вы можете ввести UriInfo и вытащить параметры запроса из этого:

@Path("/operation") 
public class Operation {

    @Context
    protected UriInfo info;

    @GET 
    public String operation() {
        if (info.getQueryParameters().containsKey("create"))
            // do stuff
        else if (info.getQueryParameters().containsKey("info"))
            // other stuff
    } 

}

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

Как вы уже упоминали, возможно, вы могли бы написать что-то более стандартное, а затем переназначить запросы на это , Например, для изменения запроса можно использовать фильтр Servlet или внешний сервер, например Apache httpd или nginx.

Мышление в терминах ресурсов что это за действия? Учетные записи клиентов, фильмы, биржевые торги и т. Д. Для аргументов, скажем, это «Foo». Вы можете пойти с чем-то вроде этого:

@Path("/foo") 
public class FooResource {

    @Context
    protected UriInfo info;

    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Foo getById(@QueryParam("id") int id) {
         // get Foo by id
         Foo = ....

         // return an instance of Foo and let Jersey convert it to XML
         // or JSON depending on the "Accept" header that the client sent
         return foo;
    } 

    @POST
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Response create(Foo instance)
    {
         // let Jersey deserialize the request body from JSON or XML.
         // save the instance however you want
         int id = fooService.save(instance);

         // return a 204 "created" with a "Location" header
         URI location = info.getAbsolutePathBuilder().path("{id}").build(id);
     return Response.created(location).build();
    }

}

Кажется, что ваша структура URI задана кем-то другим, поэтому это может быть не вариант для вас. Если вы выполняете текущую структуру URI, есть одна серьезная ошибка, о которой вы должны знать.

В соответствии с спецификацией HTTP 1.1 , запросы GET должны быть idempotent . Похоже, что ваш текущий проект создает новые экземпляры на стороне сервера с запросами GET. Существует потенциал для поломки ... промежуточные прокси или веб-браузеры могут кэшировать ответы на ваши запросы GET и предотвращать создание новых экземпляров.

2
ответ дан Community 24 August 2018 в 04:13
поделиться

Я думаю, что выбор метода основан на непараметрической части URI. Не можете ли вы сконструировать это так, чтобы клиент вызывал http://localhost:8080/ws/operation/info и http://localhost:8080/ws/operation/create?name=something?

Это было бы легко достичь:

@Path("/operation")
public class Operation {

    @GET 
    @Path("info")
    public String info() {
        return "info";
    }

    @GET 
    @Path("create")
    public String create(@QueryParam("name") String name) {
        return "create";
    }
}
2
ответ дан Claudio 24 August 2018 в 04:13
поделиться

Я вижу, что это уже ответили, но у меня была аналогичная проблема, и я получил решение с использованием подресурсов.

package com.example.ws;

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

@Path("/")
public class Operation {

    @Path("/")
    public Object sub(@QueryParam("operation") String operation)
    {
       if ("info".equals(operation))
          return new InfoOp();
       if ("create".equals(operation))
          return new CreateOp();
       //handle via error code
    }

    public class InfoOp {
        @GET 
        public String info() {
            return "info";
        }
    }

    public class CreateOp {
        @GET 
        public String create(@QueryParam("name") String name) {
            return "create: " + name;
        }
    }
}
2
ответ дан Paul Bilnoski 24 August 2018 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: