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);
}

如果我可以解决相关问题,constructMapTypeconstructParametricType 有什么优势?

您可以通过以下方式完成:

  • 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);