必须有一种方法来创建JavaType
from String.class
?
注意:方法的输入must be JavaType
对于我的用例,因为该值是使用动态创建的TypeFactory
.
/** 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
over constructParametricType
?
您可以通过以下方式做到这一点:
-
从规范构造 https://fasterxml.github.io/jackson-databind/javadoc/2.10/com/fasterxml/jackson/databind/type/TypeFactory.html#constructFromCanonical-java.lang.String-方法。例如:
typeFactory.constructFromCanonical(String.class.getName())
-
构造类型 https://fasterxml.github.io/jackson-databind/javadoc/2.10/com/fasterxml/jackson/databind/type/TypeFactory.html#constructType-java.lang.reflect.Type-方法。例如:
typeFactory.constructType(new TypeReference<String>() {})
.
-
构造数组类型 https://fasterxml.github.io/jackson-databind/javadoc/2.10/com/fasterxml/jackson/databind/type/TypeFactory.html#constructArrayType-java.lang.Class-方法。例如:
typeFactory.constructArrayType(String.class).getContentType()
。但这看起来有点像一种解决方法。
-
SimpleType.constructUnsafe https://fasterxml.github.io/jackson-databind/javadoc/2.10/com/fasterxml/jackson/databind/type/SimpleType.html#constructUnsafe-java.lang.Class- method. For example:
SimpleType.constructUnsafe(String.class)
. Note from documentation: Method used by core Jackson classes: NOT to be used by application code: it does NOT properly handle inspection of super-types, so neither parent Classes nor implemented Interfaces are accessible with resulting type instance. So, even it is possible to use try to avoid it.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)