如何解决如何为非具体Map类型添加适当的Json解串器?
我使用raml-to-jaxrs-plugin生成了api,并创建了JAXRSClientFactoryBean对象来调用它。
var clientFactoryBean = new JAXRSClientFactoryBean();
objectMapper.registerModule(new MyJacksonModule());
clientFactoryBean.setProvider(new JacksonJsonProvider(objectMapper));
现在,我正在尝试使用apache.cxf和javax.ws.rs-api解析响应,但仍然出现异常:
Caused by: java.lang.IllegalArgumentException: Cannot find a deserializer for non-concrete Map type [map type; class javax.ws.rs.core.MultivaluedMap,[simple type,class java.lang.String] -> [collection type; class java.util.List,contains [simple type,class java.lang.String]]]
这是代码:
api的一部分[生成]
@Path("/customers")
public interface CustomerApi {
@POST
@Produces("application/json")
@Consumes("application/json")
PostCustomersResponse postCustomers(
@HeaderParam("callTimeout") int callTimeout,@HeaderParam("Content-Type") String contentType,CustomerPOSTRequest entity);
class PostCustomersResponse extends ResponseDelegate {...}
....
}
public class ResponseDelegate extends Response {
....
@Override
public MultivaluedMap<String,Object> getHeaders() {
return this.delegate.getHeaders();
}
响应扩展[已生成]
public class ResponseDelegate extends Response {
private final Response delegate;
....
@Override
public MultivaluedMap<String,Object> getHeaders() {
return this.delegate.getHeaders();
}
}
MyService类:
class MyCustomerService {
....
@Override
public String processCustomer(MyCustomerRequest customerRequest) {
CustomerPOSTRequest request = prepareRequest(customerRequest);
CustomerApi.PostCustomersResponse response = customerApi.postCustomers("5",APPLICATION_JSON_VALUE,request);
return response.readEntity(String.class);
}
我试图同时将json作为String以及作为Response对象,但是遇到了同样的错误。调用api方法processCustomer时已引发异常。
我已经看到了另一个主题,并尝试构建here之类的解决方案,但这无济于事。
public class MyJacksonModule extends SimpleModule {
public MyJacksonModule()
{
addKeyDeserializer(
MultivaluedMap.class,new MultivaluedMapClassKeyDeserializer());
}
}
实际上,我什至不需要任何MultivaluedMap字段,但是我发现它是生成的api类(扩展javax.ws.rs.core.Response的ResponseDelegate)的一部分
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。