Jackson 从 Class 创建 JavaType

2024-02-24

必须有一种方法来创建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(使用前将#替换为@)

Jackson 从 Class 创建 JavaType 的相关文章

随机推荐