我最近问了这个问题: Question I asked recently
我喜欢链接代表BTW的安静方式。问题本质上是如何将复杂参数传递给我的REST服务?该代码的代码和参数会是什么样的?好吧,我想的越多,就越能让我想起一个简单的网页表单提交。请记住,此服务的客户端将是本机应用程序。为什么客户端应用程序无法将问题中的变量组合到post请求键值对象(包括字节数组文件)中,捆绑并将其发送到我的服务,在那里将发生相应的操作/响应?很确定Java(RESTEasy是我正在使用的框架)可以优雅地处理请求。我疯了还是已经解决了这个问题?
作为一个例子,看看有没有人有一个示例HTML字符串代表一个简单的几个变量的帖子,像这样?
{{1}}
但是使用html标题和所有???我从这里得到了这个例子顺便说一下: example JSON post
答案 0 :(得分:1)
RestEasy
框架已经提供了JAX-RS client
实施,除非您想从HttpURLConnection
开始使用HttpClient
甚至Apache HttpComponents
。
无论如何,只要问题与RESTEasy相关,我将提供后一个框架的示例。
如果帖子看起来像这样:
@Path("/client")
public class ClientResource {
@POST
@Consumes("application/json")
@Produces("application/json")
public Response addClient(Client aClient) {
String addMessage=clientService.save(aClient);
return Response.status(201).entity(addMessage).build();
}
...
}
基本的RestEasy Client
电话看起来像这样:
public void testClientPost() {
try {
ClientRequest request = new ClientRequest(
"http://localhost:8080/RestService/client");
request.accept("application/json");
Client client=new Client(5,"name","login","password");
//convert your object to json with Google gson
//https://github.com/google/gson
String input = gson.toJson(client);
request.body("application/json", input);
ClientResponse<String> response = request.post(String.class);
if (response.getStatus() != 201) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
//this is used to read the response.
BufferedReader br = new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(response.getEntity().getBytes())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}