来自简单终端客户端

时间:2017-01-03 10:26:30

标签: java rest jersey-2.0 jersey-client

有人能告诉我如何从简单的终端客户端拨打帖子请求吗?

    @POST
    @Path("insertt")
    public void insert(@QueryParam("id") Integer id,
                       @QueryParam("name") String name,
                       @QueryParam("lastname") String lastname,
                       @QueryParam("adress") String adress,
                       @QueryParam("city") String city ) {
        Customer cust = new Customer();
        cust.setCustomerId(id);
        cust.setName(name);
        cust.setLastNAme(lastname);
        cust.setAddressline1(adress);
        cust.setCity(city);
        customerDAO.add( cust );
    }

在客户端我做:

Client c = ClientBuilder.newClient();   
WebTarget resource = c.target("http://localhost:8080/WebService/webresources/generic/insertt?id=100&name=test&lastname=test&adress=test&city=test");
//resource.request().post(); // This does not work

2 个答案:

答案 0 :(得分:1)

  1. 因为您尝试发送POST数据@QueryParam将无法正常工作,因为发布数据将作为请求正文发送而不是作为查询参数发送(这意味着不像您那样附加在URL中)。因此,您必须按如下方式更改资源方法:

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Path("insertt")
    public void insert(@FormParam("id") Integer id,
                       @FormParam("name") String name,
                       @FormParam("lastname") String lastname,
                       @FormParam("adress") String adress,
                       @FormParam("city") String city ) {
    
    Customer cust = new Customer();
    cust.setCustomerId(id);
    ...
    customerDAO.add( cust );
    

    }

  2. 按照以下方式更改您的客户:

    Client client = ClientBuilder.newClient();
    WebTarget target = client.target("http://localhost:8080/WebService/webresources/generic").path("insertt");
    Form form = new Form().param("id", "100").param("name", "test").param("lastname", "test").param("address", "test").param("city", "test");
    Response response = target.request().post(Entity.form(form));
    
  3. 此示例仅模拟HTML表单提交。如果要以XML或JSON或任何其他形式发送数据,则必须查看JAX-RS文档。网上有很多资源;这里有一些示例网站:

    注意:该示例使用Jersey 2.23和Wildfly 8.2.1进行测试

答案 1 :(得分:0)

使用curl命令记录here

  

...使用curl发布此表单,其中包含与以前相同的数据,我们   可以这样做:

     

curl --data“birthyear = 1905& press =%20OK%20”   http://www.example.com/when.cgi这种POST将使用   Content-Type application / x-www-form-urlencoded是最广泛的   使用了POST类。

     

您发送到服务器的数据必须已正确编码,卷曲   不会那样做的。例如,如果您想要包含数据   一个空间,你需要用%20等替换那个空间。没有   遵守这一点很可能会导致您的数据被收到   错误地搞砸了。

     

最近的curl版本实际上可以为你编写POST数据,比如   这样:

     

curl --data-urlencode“name =我是丹尼尔”http://www.example.com如果   你在命令行上重复几次--data,curl会   连接所有给定的数据 - 并放一个'&'之间的符号   每个数据段。