我是REST API的新手,并且通常使用服务器,我正在尝试创建一个简单的客户端 - 服务器应用程序。我正在使用泽西岛。
客户端将一些数据发送到服务器,服务器接收数据并将其显示在所需的uri上,反之亦然。
接收托管在服务器上的数据的反之亦然部分工作正常,但我无法将数据发送到服务器。
我试过像这样的POST:
@POST
@Path("/something")
@Consumes("application/x-www-form-urlencoded")
public void getSomething(){
}
我的客户端代码看起来像这样:
Client client = Client.create();
MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("name1", "val1");
formData.add("name2", "val2");
WebResource resource = client.resource("http://localhost:8080/artifact/rest/something");
ClientResponse response = resource.type("application/x-www-form-urlencoded").post(ClientResponse.class, formData);
System.out.println(response);
我试图将一个字符串或json类型的对象发送到服务器,它应该在该URL上显示它。但我无法这样做。
如果有人可以帮助我,我会很感激。
编辑我也很感激,如果有人能告诉我如何使用这样的代码将数据发送到服务器。
尝试将此格式用于球衣服务器端,尽管您使用的是相同的:
@POST
@Path("your path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
对于客户端,请尝试使用此功能。
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(url + "/rest/something");
post.addHeader("Accept" , "application/json");
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name1", "val1"));
params.add(new BasicNameValuePair("name2", "val2"));
post.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
HttpResponse response = httpClient.execute(post);
String out = EntityUtils.toString(response.getEntity());
你的getSomething
没有返回任何东西。这转换为204 No Content
响应:操作成功(代码的2xx
表明这一点),但没有任何回报。
如果要返回某些内容,请将返回类型从void
更改为Response
。
@POST
@Path("/something")
@Consumes("application/x-www-form-urlencoded")
@Produces("text/plain")
public Response getSomething() {
return Response.ok("Success!").build();
}
这将返回HTTP状态代码200 OK
,其中Success!
作为响应正文的内容。
但您可能希望以某种方式使用请求的内容。看看jax-rs retrieve form parameters如何做到这一点。