在使用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);
我缺少什么?
答案 0 :(得分:0)
您的提供者似乎没有被注册;取决于您使用Resteasy的方式/位置,您可能需要进行其他配置,以确保它为您提供了这类东西(http://docs.jboss.org/resteasy/docs/3.6.3.Final/userguide/html_single)。
例如,如果您正在使用servlet配置,则可能需要使用resteasy-servlet-initializer
,或添加spring助手等。
请注意,如果您要构建(或只是进行测试),则很可能会在构建JSON-P提供程序时向客户端,目标或请求本身显式注册
答案 1 :(得分:0)
感谢您的提示。确实是解决方案。该应用程序是命令行客户端(Java SE)。解决方案是-除了添加依赖项以外-在创建客户端实例时要注册提供程序:
ClientBuilder
.newClient()
.register(JsonArrayProvider.class)
.register(JsonObjectProvider.class)
.register(JsonStructureProvider.class)
.register(JsonValueProvider.class)
... // create request