POST复杂参数对于REST服务,我可以使用模拟表单提交

时间:2016-07-17 01:00:25

标签: json rest resteasy

我最近问了这个问题: Question I asked recently

我喜欢链接代表BTW的安静方式。问题本质上是如何将复杂参数传递给我的REST服务?该代码的代码和参数会是什么样的?好吧,我想的越多,就越能让我想起一个简单的网页表单提交。请记住,此服务的客户端将是本机应用程序。为什么客户端应用程序无法将问题中的变量组合到post请求键值对象(包括字节数组文件)中,捆绑并将其发送到我的服务,在那里将发生相应的操作/响应?很确定Java(RESTEasy是我正在使用的框架)可以优雅地处理请求。我疯了还是已经解决了这个问题?

作为一个例子,看看有没有人有一个示例HTML字符串代表一个简单的几个变量的帖子,像这样?

{{1}}

但是使用html标题和所有???我从这里得到了这个例子顺便说一下: example JSON post

1 个答案:

答案 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();
        }
    }