【问题标题】:Jersey WebTarget vs HTTPURLConnectionJersey WebTarget vs HTTPURLConnection
【发布时间】:2016-10-04 10:02:23
【问题描述】:

我正在学习使用 Java 的 Web 服务。从技术上讲,我是一个菜鸟,这是我编写的代码,它有效,我只是不知道哪种方法比另一种方法有什么优势,比如哪种方法更安全?哪个会更快? 我不是要求一个完整的太宽泛的答案。一个简短的就可以了。 我使用 Jersey 2.x 创建了一个 REST 服务,并创建了客户端来使用上述 REST 服务。

POST资源如下,

@POST
@Path("postactivity")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String createActivity(
        @QueryParam("id") int id,
        @QueryParam("description") String description,
        @QueryParam("duration") int duration,
        @QueryParam("name")String name)
{
    //My code that creates Activity object from QueryParams is here.
}   

现在我创建了一个客户端,它是一个 Java 应用程序。我通过以下两种方式使用上面的 REST 服务。

方法一 使用HTTPURLConnection

    private static void doPost(){
    QueryString qs = new QueryString("id", "123"); //QueryString is a class created to build query, not important to the question.
    qs.add("duration", "12");
    qs.add("description", "This is description");
    qs.add("name", "This is Name");
    String url = "http://localhost:8080/webservices/webapi/activities/activity?" + qs;

    URL obj;
    try {
        obj = new URL(url);
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setRequestProperty("Content-Type","application/json");
        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", "Mozilla 5.0");
        con.setDoOutput(true);


        BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        Activity activity = GSON.fromJson(response.toString(), Activity.class); //This is for checking if i'm getting correct data back which I'm sending.


    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
 }

方法 2 使用 Jersey 提供的 WebTarget

private static void doPost(){
    Response entity = webTarget
            .path("activities/postactivity")
            .queryParam("id",2204)
            .queryParam("description","Foo")
            .queryParam("duration",100)
            .queryParam("name", "Bar")
            .request()
            .post(null);
    String entityRead = entity.readEntity(String.class);

    System.out.println(entityRead);
    Activity activityRead = GSON.fromJson(entityRead, Activity.class);
    }

谢谢。

【问题讨论】:

  • 您能指出问题吗?该实施适合您,您想要什么?目前,您似乎想要概述使用 RESTful Web 服务的所有方式。
  • @SergeyBrunov 我只想知道推荐使用这两种方法中的哪一种,以及使用一种方法是否比其他方法有优势/劣势。

标签: java jersey-2.0 jersey-client


【解决方案1】:

Honestyl 我有两件事要写给你: 1. HttpURLConnection 是 Java 个人检索 Web 附属机构(如 Web 服务)的方式,但您可以使用 Jersey 更好、更轻松地进行检索,这将使您的事情变得更快、更顺畅。对于某些人来说,他们甚至说 Jersey 风格是高级 API,而 HttpURLConnection 被称为低级 API。 2. 您的问题能够为我在过去两天使用@Queryparam POST webmethod 时遇到的问题提供必要的解决方案。我真的很感激这一点。

谢谢

【讨论】:

  • 这不是一个有用的答案,更适合作为评论
猜你喜欢
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2011-02-20
  • 2021-04-30
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多