Java中的动态Rest客户端

时间:2016-10-19 01:32:35

标签: java web-services rest client jax-rs

我正在尝试创建一个动态的Rest客户端,我可以在其中设置HTTP方法(GET-POST-PUT-DELETE),Query Params和body(Json,plain,XML),这基本上就是我需要的,对于请求,我想我知道我怎么做,但我关心的是阅读答案,因为我知道我应该得到什么(格式)但我不知道如何正确阅读它,到目前为止我返回一个对象,下面代码(仅用于POST,但想法是一样的):

        Response responseRest = null;
        Client client = null;
        try {
            client = new ResteasyClientBuilder().establishConnectionTimeout(TIME_OUT, TimeUnit.MILLISECONDS).socketTimeout(TIME_OUT, TimeUnit.MILLISECONDS).build();

            WebTarget target = client.target(request.getUrlTarget());
            MediaType type = assignResponseType(request.getTypeResponse());
                switch (request.getProtocol()) {
                    case POST: {
                        if (request.getParamQuery() != null) {
                            for (VarRequestDTO varRequest : request.getParamQuery()) {
                                target = target.queryParam(varRequest.getName(), varRequest.getValue());
                            }
                        }
                        responseRest = target.request().post(Entity.entity(new ResponseWrapper(), type));
                        break;
                    }
                    default:
                    //HTTP METHOD No supported
                }

                Object result = responseRest.readEntity(Object.class);
        }
        catch (Exception e) {
            response.setError(Boolean.TRUE);
            response.setMessage(e.getMessage());
            e.printStackTrace();
        } finally {
            if (responseRest != null) {
                responseRest.close();
            }
            if (client != null) {
                client.close();
            }
        }

我基本上需要的是以所需的格式返回对象,并且在其中调用它应该以正确的格式进行转换,我只需要它是动态的并用于任何服务。 感谢

1 个答案:

答案 0 :(得分:0)

ReST客户端向ReST服务发出的每个请求都会传递"接受"头。

这是为了向服务指示客户端愿意接受的资源的MIME类型。 在上面的例子中,你可接受的格式是什么(json / plain text /等)?

取决于"接受"您选择的格式,以及"内容类型"您收到的标题,您可以编写一个反序列化程序来接受该数据并进行处理。

此外,不要返回过于通用的Object,而是考虑将可读的Stream返回给调用者。