Ana*_*lan 11 java rest cxf jax-rs jackson
我有一个JAX-RS客户端正在做一个简单的GET请求.我正在使用CXF实现和Spring for DI.呼叫成功,我得到200响应代码.但是当我将反馈读入我的POJO时,我收到了一个错误.
例外:
[2015-05-08 16:11:55,457][ERROR][org.apache.cxf.jaxrs.utils.JAXRSUtils]: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json
[2015-05-08 16:11:55,468][ERROR][com.voya.refapp.service.CustomerServiceImpl]: filterByName() - Exception occurred
javax.ws.rs.client.ResponseProcessingException: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json
at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:433) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4]
at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:384) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4]
Run Code Online (Sandbox Code Playgroud)
码:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:8080/rest").path("customers/1");
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
Response response = builder.get(); // Successful
Customer customer = response.readEntity(Customer.class); // Fails
Run Code Online (Sandbox Code Playgroud)
我在类路径中的答案中提出了以下依赖关系,它似乎没有自动获取.
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我还尝试在创建客户端时注册json提供程序:
Client client = ClientBuilder.newClient().register(new JacsksonJsonProvider());
Run Code Online (Sandbox Code Playgroud)
和
Client client = ClientBuilder.newClient().register(JacsksonJsonProvider.class);
Run Code Online (Sandbox Code Playgroud)
但这些选项都没有奏效.当我使用上述选项之一注册json提供程序时,我遇到了一个不同的异常:
javax.ws.rs.client.ResponseProcessingException: Problem with reading the data
Run Code Online (Sandbox Code Playgroud)
更新:
注册json提供程序工作得很好ClientBuilder.newClient().register(JacsksonJsonProvider.class).问题在于数据(就像上面的例外情况一样明确表示......我现在觉得很傻:().我在json中有一个名为"active"的布尔字段,但它在POJO中被称为"isActive".一旦我添加了@JsonProperty("active")POJO中的字段注释,它开始工作正常
Daw*_*tel 11
AFAIK CXF并没有支持自动发现的MessageBodyReader类.但手动注册JacksonJsonProvider应该适合您.
请检查我的例子是否完美.它与您的几乎完全相同,我只是使用了不同的服务.也许你可以发现阻止你的版本正常工作的差异.
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
WebTarget target = client.target("http://jsonplaceholder.typicode.com").path("posts/1");
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
Response response = builder.get(); // Successful
Post post = response.readEntity(Post.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14444 次 |
| 最近记录: |