簡體   English   中英

如何將多個參數傳遞給Jersey POST方法

[英]How to pass multiple parameters to Jersey POST method

我試圖將多個參數傳遞給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;
    }
}

現在,我想通過Jersey POST方法將參數傳遞給以下方法。

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

上面有什么想法嗎?

謝謝。

您可以嘗試使用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);
}

閱讀更多這里的文檔..

JSON數據無法傳遞到List中的服務器。 這意味着您應該在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

如果您使用的是Jersey 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) {
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM