Jackson 从 Class 创建 JavaType

cam*_*ous 6 java class jackson jackson2

必须有一种方法来创建一个JavaTypefrom String.class?

注意:该方法的输入必须 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);
}
Run Code Online (Sandbox Code Playgroud)

如果我可以回答一个相关的问题,constructMapTypeover 有constructParametricType什么好处?

Phi*_*imo 13

如果你在这里只是因为你想JavaType从一个Class对象创建一个,
那么使用ObjectMapper像这样:

   JavaType javaType = objectMapper.constructType(clazz);
Run Code Online (Sandbox Code Playgroud)


Mic*_*ber 8

你可以这样做:

  • 构造FromCanonical方法。例如:typeFactory.constructFromCanonical(String.class.getName())
  • 构造类型方法。例如:typeFactory.constructType(new TypeReference<String>() {})
  • 构造数组类型方法。例如:typeFactory.constructArrayType(String.class).getContentType()。但它看起来有点像一种解决方法。
  • SimpleType.constructUnsafe方法。例如:SimpleType.constructUnsafe(String.class)。文档说明:核心 Jackson 类使用的方法:应用程序代码不使用:它不能正确处理超类型的检查,因此父类和实现的接口都不能通过结果类型实例访问。所以,即使有可能使用尽量避免它。