2016-08-29 4 views
1

Ich versuche, mehrere Parameter an Jersey POST-Methode übergeben. Zurzeit gehe ich folgendermaßen vor, um einen einzelnen Parameter an die Jersey POST-Methode zu übergeben. JetztWie mehrere Parameter an Jersey POST-Methode übergeben werden

Client client = ClientBuilder.newClient(); 
WebTarget target= client.target("http://localhost:8080/Rest/rest/subuser").path("/insertSubUser"); 

SubUserBean subUserBean=new SubUserBean(); 
subUserBean.setIdUser(1); 
subUserBean.setIdSubUserType(1); 
subUserBean.setIdSubUser(15); 
subUserBean.setFirstName("Haritha"); 
subUserBean.setLastName("Wijerathna"); 
subUserBean.setNumberOfDaysToEditRecord(14); 
subUserBean.setUserName("haritha"); 
subUserBean.setPassword("hariwi88"); 
subUserBean.setDateCreated(Common.getSQLCurrentTimeStamp()); 
subUserBean.setLastUpdated(Common.getSQLCurrentTimeStamp()); 

target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.entity(subUserBean, MediaType.APPLICATION_JSON_TYPE)); 

SubUserJSONService.java

@Path("/subuser") 
public class SubUserJSONService { 

    @POST 
    @Path("/insertSubUser") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public String updateSubUser(SubUserBean bean){ 

     SubUserInterface table = new SubUserTable(); 
     String result= table.insertSubUser(bean); 
     return result; 
    } 
} 

möchte ich Parameter übergeben über Jersey POST-Methode folgende Methode.

public String insertHistory(List<SocialHistoryBean> list, String comment){ 
    //my stuffs 
} 

Haben Sie irgendwelche Ideen über die Arbeit zu tun?

Vielen Dank.

Antwort

3

Sie können versuchen, MultivaluedMap zu verwenden. Fügen Sie Formulardaten hinzu und senden Sie sie an den Server. Ein Beispiel unten, Code wird nicht nur für Demo/Logikfluss getestet.

WebTarget webTarget = client.target("http://www.example.com/some/resource"); 
    MultivaluedMap<List, String> formData = new MultivaluedHashMap<List, String>(); 
    formData.add(List, "list1"); 
    formData.add("key2", "value2"); 
    Response response = webTarget.request().post(Entity.form(formData)); 

Verbrauchen diese auf Server-Seite so etwas wie

@Path("/uripath") 
@POST -- if this is post or @GET 
@Consumes("application/x-www-form-urlencoded;charset=UTF-8") or json.. 
@Produces("application/json") 
public void methodNameHere(@FormParam("list") List<String> list1, @FormParam("key2") String val2) { 

    System.out.println("Here are I am"); 
    System.out.println("list1" + list1.size); 
    System.out.println("val2" + val2); 
} 

mehr here in docs lesen ..

+0

Dies ist in Client-Seite in Ordnung. Aber wie kann ich Daten serverseitig abrufen? – Barrier

1

JSON-Daten können nicht auf dem Server in einer Liste übergeben werden. Dies bedeutet, dass Sie einen Wrapper um Ihre SocialHistoryBean Klasse erstellen sollte (dh um die Liste, die Ihre Objekte hält)

@XmlRootElement(name = "uw") 
public class SocialHistoryBeanWrapper implements Serializable { 

private List<SocialHistoryBean> sList ;//this will hold your SocialHistoryBean instances 
public SocialHistoryBeanWrapper(){ 
    sList = new ArrayList<User>(); 

    } 
public List<User> getUsrList(){ 
    return sList; 
} 
    } 

Ihr Server wird seitigen Code wie

sein
@POST 
@Path("/history") 
@Produces(MediaType.TEXT_PLAIN) 
@Consumes(MediaType.APPLICATION_JSON) 
public String insertHistory(@QueryParam("comment") String comment, SocialHistoryBeanWrapper uw) { 
    do whatever you want with your history data 
    //userData.setUser(uw.getUsrList().get(0)); 

    return comment; //just echo the string that we have sent from client 

} 

Beachten Sie, dass Kommentar mit @ geben QueryParam (dies bedeutet, dass es nicht Teil der POST-Anforderung (Körper), sondern wird in der URL-Zeichenfolge codiert. Dazu arbeiten Sie Ihren Dienst als (der Client-Code aufrufen können)

WebTarget target = client.target(UriBuilder.fromUri("http://localhost:8088/Rest/rest/subuser").build());  

SocialHistoryBeanWrapper uw = new SocialHistoryBeanWrapper(); 

     //just populate whatever fields you have; 
     uw.getUsrList().get(0).setName("Mark Foster"); 
     uw.getUsrList().get(0).setProfession("writer"); 
     uw.getUsrList().get(0).setId(55); 


     String s = target.path("history").queryParam("comment", "OK").request() 
        .accept(MediaType.TEXT_PLAIN).post(Entity.entity(uw, MediaType.APPLICATION_JSON), String.class); 

     System.out.println(s);//this prints OK 
1

Falls Sie sich Jersey 1.x verwenden, lesen Sie in diesem Beispiel, wie mehrere Objekte als @FormParam

-Client schreiben: (reine 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); 
} 

Server:

@Path("/test") 
@POST 
@Produces(MediaType.APPLICATION_JSON) 
public void test(@FormParam("param1") String param1, @FormParam("param2") String param2) { 
    ... 
} 
Verwandte Themen