使用 JAX-RS GenericType 进行 Jackson 对象映射
Use JAX-RS GenericType for Jackson object mapping
我想为javax.ws.rs.client.SyncInvoker
写一个代理:
@Override
public <T> T get(GenericType<T> responseType) {
String payload = delegate.get(String.class);
// very important logic...
return objectMapper.readValue(payload, responseType); // fix this
}
当然,上面的代码无法编译,因为 jackson 对来自 jax-rs 的 GenericType
一无所知。看来我可以使用以下方法之一:
public <T> T readValue(String content, TypeReference valueTypeRef)
public <T> T readValue(String content, JavaType valueType)
但我很难找到将 GenericType
转换为 TypeReference
或 JavaType
的正确方法。
将我的评论提升为答案。试试这个:
JavaType javaType = objectMapper.constructType(responseType.getType())
我想为javax.ws.rs.client.SyncInvoker
写一个代理:
@Override
public <T> T get(GenericType<T> responseType) {
String payload = delegate.get(String.class);
// very important logic...
return objectMapper.readValue(payload, responseType); // fix this
}
当然,上面的代码无法编译,因为 jackson 对来自 jax-rs 的 GenericType
一无所知。看来我可以使用以下方法之一:
public <T> T readValue(String content, TypeReference valueTypeRef)
public <T> T readValue(String content, JavaType valueType)
但我很难找到将 GenericType
转换为 TypeReference
或 JavaType
的正确方法。
将我的评论提升为答案。试试这个:
JavaType javaType = objectMapper.constructType(responseType.getType())