有人能告诉我如何从简单的终端客户端拨打帖子请求吗?
@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
答案 0 :(得分: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 );
}
按照以下方式更改您的客户:
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));
此示例仅模拟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会 连接所有给定的数据 - 并放一个'&'之间的符号 每个数据段。