当前位置: 首页 > 知识库问答 >
问题:

如何为外部world REST服务创建REST客户端

公良莫希
2023-03-14

如何使用JAX-RS Client Fluent API为外部世界REST服务创建rest客户端?

例如,假设一个服务返回一个person对象,该对象有两个字段名和年龄。

无论我遇到什么样的例子/教程,他们做同样的事情,下面的片段或他们开发客户端在同一个项目,以取代tring.classperson.class.我应该如何创建独立的客户端,将返回我pojo的人。

String entity = client.target("http://example.com/rest")
        .path("resource/helloworld")
        .queryParam("greeting", "Hi World!")
        .request(MediaType.TEXT_PLAIN_TYPE)
        .header("some-header", "true")
        .get(String.class);

共有1个答案

公羊招
2023-03-14

例如,您正在使用一个REST API,它在执行<代码> >获取< /代码>请求时提供以下JSONhttp://example.com/api/people/1:

{
  "name": "John Doe",
  "age": 25
}

上述JSON可以映射到Java类,定义如下:

public class Person {

    private String name;

    private Integer age;

    // Constructor, getters and setters omitted
}

使用JAX-RS客户机API,可以按如下方式请求JSON,将请求的实体映射到Person类:

Client client = ClientBuilder.newClient();
Person person = client.target("http://example.com/api")
                      .path("people").path("1")
                      .request(MediaType.APPLICATION_JSON)
                      .get(Person.class);

String name = person.getName();
Integer age = person.getAge();

JAX-RS客户端API是JAX-RS 2.0规范的一部分,参考实现是泽西。

为了解析JSON,Jersey为多个框架提供了一组扩展模块,这些框架支持JSON处理和/或JSON到Java绑定。Jersey支持MOXy、JSON-P、Jackson和抛弃。有关更多详细信息,请参阅文档。

如果出于某种原因,需要手动解析请求的实体,可以将请求的实体存储在字符串中

Client client = ClientBuilder.newClient();
String json = client.target("http://example.com/api")
                    .path("people").path("1")
                    .request(MediaType.APPLICATION_JSON)
                    .get(String.class);

然后可以使用例如Jackson手动解析请求的实体:

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);

String name = node.path("name").asText();
Integer age = node.path("age").asInt();

若要手动解析JSON,还可以考虑GSON。

有关如何使用Java使用REST API的替代方法,请查看此答案。

 类似资料:
  • NewTLSServer创建的服务器可以验证对显式从其创建的客户端的调用: 在行中。 但是,我有一个生产程序,我想将其设置为使用作为主机。我越来越 我称之为错误。 我如何设置与客户端进行身份验证,就像普通的HTTPS服务器一样?

  • 此功能的状态是实验性的。我们欢迎您对此功能的实用性的反馈。我们可能会在未来发展这个功能,使其更加通用。虽然我们将努力确保向后兼容性,但不能保证。 场景 在某些情况下,希望能够从交易处理函数中调用REST API。这使你可以将区块链中的复杂计算移出。调用REST API允许交易处理器功能将复杂或昂贵的计算外包给中央或peer托管的服务。 调用外部REST服务 post(url,data)函数可用于交

  • 15.1 数据库迁移 这个名字是源自于Ruby On Rails在那时候的印象,不直接使用MySQL的目的在于让我们可以专注于过程。 15.1.1 创建表 表的概念,类似于在Excel中的表,如果你真实不懂数据库。 让我们创建一个athomes的表,为什么是athomes,因为以前在写android程序的时候就叫的是athome,忽略掉这些次要的因素吧。 $ php artisan migrate

  • 关于Netflix Eureka Service Registry,我已经成功地使用Tomcat8.0.35设置了Eureka Netflix服务器。我还得到了基本的示例服务&客户端来进行相互通信。我对Eureka还是个新手,管理层决定将Eureka与Spring一起使用,因为几个新的应用程序都是围绕Spring框架编写的。 null 我希望为大多数非AWS云实例配置服务和客户端。Eureka W

  • 我是java和web服务以及的新手。我最近使用一些教程创建了一个web服务。当我第一次学习eclipse教程时,让我创建一个客户机。但是当我尝试创建一个新项目和一个新的web服务客户机时,它会给出。具体如下所示: im使用Axis2-1.6.1,它说java遵从性级别是6,我搜索了一下,但是找不到解决这个问题的相关方案。感谢任何帮助。

  • 我正在使用Spring3.0 restTemboard通过调用post方法消费json webservice。 我们的应用程序部署在WAS服务器中,并试图通过创建与TLS1的套接字连接来连接producer。0.但是,现在producer只支持TLS1。1和TLS1。2. 如何强制restTempate使用TLS1。1或TLS 1.2。 通常,对于apache httpClient代码,创建自定义