2016-08-29 55 views
1

我想将多个参数传递给Jersey POST方法。目前,我正在按照以下步骤将单个参数传递给Jersey POST方法。如何将多个参数传递给Jersey POST方法

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

现在,我要传递参数给通过泽西POST方法下面的方法。

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

有任何想法做以上的工作?

谢谢。

回答

3

您可以尝试使用MultivaluedMap。添加表单数据并将其发送到服务器。下面的例子中,代码不仅仅用于演示/逻辑流程。

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

消费这在服务器端类似

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

更多here在文档..

+0

这在客户端很好。但是我怎样才能在服务器端检索数据? – Barrier

1

JSON数据不能在列表中传递给服务器。这意味着你应该在你的SocialHistoryBean类创建一个包装(即约持有你的对象列表)

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

你的服务器端代码会像

@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 

} 

注意注释与@传递QueryParam(这意味着它不是POST请求(体)的一部分,但在URL字符串,而编码。对于这个工作,你可以打电话给你的服务为(客户端代码)

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

如果您正在使用泽西1.x中,检查这个例子如何发布多个对象作为@FormParam

客户:(纯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) { 
    ... 
}