【问题标题】:JAX-RS/RestEasy Client and JSON-PJAX-RS/RestEasy 客户端和 JSON-P
【发布时间】:2019-09-25 11:37:26
【问题描述】:

在使用 JAX-RS 和 RestEasy 作为实现编写的 REST 客户端中,我正在尝试通过 POST 将 JsonObject 发送到 WebService。项目使用JSON-P的参考实现,org.glassfish.javax.json。

当我尝试发送请求时,出现以下异常:

javax.ws.rs.ProcessingException:RESTEASY003215:找不到内容类型应用程序/json 类型的编写器:org.glassfish.json.JsonObjectBuilderImpl$JsonObjectImpl

以下工件存在于 pom.xml 中:

<dependency>
   <groupId>javax.json</groupId>
   <artifactId>javax.json-api</artifactId>
   <version>1.1.4</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1.4</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-jaxrs</artifactId>
    <version>3.6.3.SP1</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-client</artifactId>
    <version>3.6.3.SP1</version>
</dependency>
<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>resteasy-json-p-provider</artifactId>
    <version>3.6.3.SP1</version>
</dependency>

根据我在文档中阅读的内容,应该是所有必要的。

调用的请求如下:

final JsonObjectBuilder credentialsBuilder = Json.createObjectBuilder();
credentialsBuilder.add("username", configuration.getServiceUser());
credentialsBuilder.add("password", configuration.getServicePassword());

final Entity<JsonObject> credentials = Entity
    .json(credentialsBuilder.build());
final Response response = ClientBuilder
    .newClient()
    .target("http://www.example.org/some/url")
    .request(MediaType.APPLICATION_JSON)
    .post(credentials);

我错过了什么?

【问题讨论】:

    标签: jax-rs resteasy


    【解决方案1】:

    感谢您的提示。这确实是解决方案。该应用程序是一个命令行客户端 (Java SE)。解决方案是 - 除了添加依赖项之外 - 在创建客户端实例时注册提供程序:

    ClientBuilder
                .newClient()
                .register(JsonArrayProvider.class)
                .register(JsonObjectProvider.class)
                .register(JsonStructureProvider.class)
                .register(JsonValueProvider.class)
    ... // create request
    

    【讨论】:

      【解决方案2】:

      您的提供商似乎没有注册;根据您使用 Resteasy 的方式/位置,您可能需要进行额外的配置以确保它能够为您挑选这类东西 (http://docs.jboss.org/resteasy/docs/3.6.3.Final/userguide/html_single)。

      例如,如果你使用servlet配置,你可能需要使用resteasy-servlet-initializer,或者添加一个spring helper等。

      请注意,如果您想(或只是测试)构建 JSON-P 提供程序,您很可能可以将其显式注册到 Client、Target 或 Request 本身

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 2019-04-19
        • 2023-03-20
        • 1970-01-01
        • 2023-04-04
        • 2016-01-10
        • 1970-01-01
        相关资源
        最近更新 更多