2015-05-08 2 views
1

Мой код сервера как:передать несколько параметров в REST вызова

@POST 
@Path("/getMapping") 
public ListResponse getMapping(Long id, String name, String clientName, String instanceName) { 
    ListResponse response = null; 
    try { 
     response = new ListResponse(); 
     List<Mappings> mappings = service.getMapping(id, name, clientName, instanceName); 
     response.setStatusCode(SUCCESS); 
     response.setMappings(mappings); 
    } catch (Exception e) { 
     setResponseErrors(response, e); 
    } 
    return response; 
} 

Я использую Джерси REST клиент, но я не думаю, что есть возможность иметь несколько Params передаваемых в методе пост как:

ClientResponse clientResponse = webResource.type(XML_TYPE).post(ClientResponse.class, id, name, clientName, instanceName); 

Есть ли способ сделать это?

я мог бы использовать MultiValuedMap или @QueryParams в этом случае, но есть и другие случаи, когда несколько PARAMS являются более сложными объектами. Кроме того, обертывание всего в «paramContainer» будет неэффективным решением, так как существует так много таких методов с несколькими параметрами с различными комбинациями.

(Кстати, почему бы ОТДОХНУТЬ не поддерживает несколько Params?)

Любая помощь очень ценится.

+0

Почему downvote? какой-либо конкретной причине? – Pratik

+0

downvote сделан кем-то, кто думает, что ваш вопрос не очень ясен. (не был я кстати) – jeorfevre

+0

У меня вверх, было немного тяжело это downvote – jeorfevre

ответ

1

вот как я буду это делать SERVER КОД

  • 1,1 должны использовать @FormParam для того, чтобы объявить параметры в @FormDataParam
  • 1.2 POST лучше, если зашифрован для этого использовать @Consumes (MediaType.MULTIPART_FORM_DATA)

вы будете иметь код сервера, как это:

@POST 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Path("/getMapping") 
public ListResponse getMapping(@FormParam("id")Long id, @FormParam("name") String name, @FormParam("clientName") String clientName, @FormParam("instanceName") String instanceName) { 
    ListResponse response = null; 
    try { 
     response = new ListResponse(); 
     List<Mappings> mappings = service.getMapping(id, name, clientName, instanceName); 
     response.setStatusCode(SUCCESS); 
     response.setMappings(mappings); 
    } catch (Exception e) { 
     setResponseErrors(response, e); 
    } 
    return response; 
} 

КЛИЕНТ КОД

Form form = new Form(); 
form.add("id", "1");  
form.add("name", "[email protected]"); 
form.add("clientName","firefox"); 
form.add("instanceName","node45343.rizze.com"); 

ClientResponse response = webResource 
    .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE) 
    .post(ClientResponse.class, form); 

наслаждаться :)

+0

Не совсем сработало, но дало мне отправную точку. Так что спасибо. 1. @FormParam не поддерживается, поэтому пришлось изменить на @FormDataParam (с новой зависимостью) 2. Был конфликт типа мультимедиа, поэтому код сервера теперь: 'getMapping (Form form)' и я анализирую объект формы в способ корпус. Не идеален, но работает пока, пока не смогу понять конфликт MediaType. – Pratik

+0

Этот код компилируется и выполняется на моем dev env. Не нарушал конфликт типа медиа. Можете ли вы сказать мне, что именно происходит? Вы добавили в свой App: register (MultiPartFeature.class); добавьте: jersey-media-multipart как зависимость – jeorfevre

+0

Контекст MediaType из-за (я думаю) у меня есть @Produces (APPLICATION_XML) на код сервера. Это, похоже, вызывает проблему, когда мой клиентский код имеет .type как что-либо иное, кроме «XML». Как я уже сказал, я не принимаю объект «форма», а затем получаю значения для параметров в коде с помощью «form.getFirst». – Pratik

0

Дополнение к jeorfevre Ответим выше:

В случае, если вы используете Джерси 1.x, это то, как это работы:

Clien т: (чистый Java):

public Response testPost(String param1, String param2) { 
    // Build the request string in this format: 
    // String request = "param1=1&param2=2"; 
    String request = "param1=" + param1+ "&param2=" + param2; 
    WebClient client = WebClient.create(...); 
    return client.path(CONTROLLER_BASE_URI + "/test") 
      .post(request); 
} 

Сервер:

@Path("/test") 
@POST 
@Produces(MediaType.APPLICATION_JSON) 
public void test(@FormParam("param1") String param1, @FormParam("param2") String param2) { 
    ... 
} 
Смежные вопросы