Jackson 从 Class 创建 JavaType
Jackson create JavaType from Class
一定有办法从 String.class
?
创建 JavaType
注意:对于我的用例,方法 的输入必须是 JavaType
,因为该值是使用 TypeFactory
.[=18= 动态创建的]
/** Returns a JavaType for Map<String, valueType> **/
private static JavaType stringToJavaType(JavaType valueType) {
TypeFactory typeFactory = objectMapper.getTypeFactory();
// this does not compile, can't mix Class and JavaType
return typeFactory.constructMapType(Map.class, String.class, valueType);
}
如果我可以解决相关问题,constructMapType
比 constructParametricType
有什么优势?
您可以通过以下方式完成:
- constructFromCanonical 方法。例如:
typeFactory.constructFromCanonical(String.class.getName())
- constructType 方法。例如:
typeFactory.constructType(new TypeReference<String>() {})
.
- constructArrayType 方法。例如:
typeFactory.constructArrayType(String.class).getContentType()
。但它看起来有点像解决方法。
SimpleType.constructUnsafe 方法。例如:SimpleType.constructUnsafe(String.class)
。文档注释:核心 Jackson 使用的方法 类:应用程序代码不使用:它不能正确处理超类型的检查,因此父 类 和实现的接口都不是可以通过结果类型实例访问。 因此,即使可以使用尽量避免它。
如果您只是因为想从 Class
对象创建 JavaType
,
然后像这样使用 ObjectMapper
:
JavaType javaType = objectMapper.constructType(clazz);
一定有办法从 String.class
?
JavaType
注意:对于我的用例,方法 的输入必须是 JavaType
,因为该值是使用 TypeFactory
.[=18= 动态创建的]
/** Returns a JavaType for Map<String, valueType> **/
private static JavaType stringToJavaType(JavaType valueType) {
TypeFactory typeFactory = objectMapper.getTypeFactory();
// this does not compile, can't mix Class and JavaType
return typeFactory.constructMapType(Map.class, String.class, valueType);
}
如果我可以解决相关问题,constructMapType
比 constructParametricType
有什么优势?
您可以通过以下方式完成:
- constructFromCanonical 方法。例如:
typeFactory.constructFromCanonical(String.class.getName())
- constructType 方法。例如:
typeFactory.constructType(new TypeReference<String>() {})
. - constructArrayType 方法。例如:
typeFactory.constructArrayType(String.class).getContentType()
。但它看起来有点像解决方法。 SimpleType.constructUnsafe方法。例如:SimpleType.constructUnsafe(String.class)
。文档注释:核心 Jackson 使用的方法 类:应用程序代码不使用:它不能正确处理超类型的检查,因此父 类 和实现的接口都不是可以通过结果类型实例访问。 因此,即使可以使用尽量避免它。
如果您只是因为想从 Class
对象创建 JavaType
,
然后像这样使用 ObjectMapper
:
JavaType javaType = objectMapper.constructType(clazz);