我能够得到一个关于球衣的@GET请求,相关代码如下
服务器的代码
@Path("/Text")
@GET
public String Hello() {
System.out.println("Text Being print");
return "Abc";
}
@POST
@Path("/post/{name}/{gender}")
public Response createDataInJSON(@PathParam("name") String data, @PathParam("gender") String data2) {
System.out.println("Post Method 1");
JSONObject obj = new JSONObject();
obj.put("Name", data);
obj.put("Gender", data2);
return Response
.status(200)
.entity(obj.toJSONString())
.build();
}
在url中传递参数时@POST也有效。 (如上面的代码段所述) 但是,当参数不是通过URL发送时,它不起作用。就像下面的代码一样。
@POST
@Path("/post2")
public Response createDataInJSON2(@FormParam("action") String data) {
System.out.println("Post Method 2 : Data received:" + data);
JSONObject obj = new JSONObject();
obj.put("data", data);
return Response
.status(200)
.entity(obj.toJSONString())
.build();
}
可能问题在于调用服务的方式。
//GET call (Plain Text)
System.out.println(service.path("Hello").accept(MediaType.TEXT_PLAIN).get(String.class));
//POST call (Param)
ClientResponse response = service.path("Hello/post/Dave/Male").post(ClientResponse.class);
System.out.println(response.getEntity(String.class));
//POST call (JSON)
String input = "hello";
ClientResponse response2 = service.path("Hello/post2").post(ClientResponse.class, input);
System.out.println(response2.getEntity(String.class));
谁能告诉我在这里缺少什么?
答案 0 :(得分:1)
尝试在@POST方法createDataInJSON2
上添加@Consumes(application / x-www-form-urlencoded),并在请求service.path("Hello/post2").type(MediaType.APPLICATION_FORM_URLENCODED).post(ClientResponse.class, input)
中明确添加相同的mime类型。
还要考虑您的输入只是一个简单的字符串。看看课程MultivaluedMap
如果您遇到编码问题,请查看此帖https://stackoverflow.com/a/18005711/3183976
答案 1 :(得分:0)
试试这个。这对我有用。
帖子方法:
@POST
@Path("/post2")
public Response post2(String data) {
System.out.println("Post method with File: " + data);
return Response
.status(200)
.entity(data)
.build();
}
调用方法:
ClientResponse response2 =service.path("Hello/post2").post(ClientResponse.class,"some value");
System.out.println(response2.getEntity(String.class));
希望这会有所帮助。和平。