【问题标题】:Jackson create JavaType from ClassJackson 从 Class 创建 JavaType
【发布时间】:2020-07-06 02:14:07
【问题描述】:

一定有办法从String.class创建JavaType

注意:对于我的用例,方法的输入必须是 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);
}

如果我可以回答一个相关问题,constructMapTypeconstructParametricType 有什么优势?

【问题讨论】:

    标签: java class jackson jackson2


    【解决方案1】:

    你可以这样做:

    • constructFromCanonical 方法。例如:typeFactory.constructFromCanonical(String.class.getName())
    • constructType 方法。例如:typeFactory.constructType(new TypeReference&lt;String&gt;() {})
    • constructArrayType 方法。例如:typeFactory.constructArrayType(String.class).getContentType()。但它看起来有点像解决方法。
    • SimpleType.constructUnsafe 方法。例如:SimpleType.constructUnsafe(String.class)。来自文档的注释:核心 Jackson 类使用的方法:不被应用程序代码使用:它不能正确处理超类型的检查,因此父类和实现的接口都不能通过结果类型实例访问。 所以,即使是可以使用try to Avoid它。

    【讨论】:

      【解决方案2】:

      如果您只是因为想从 Class 对象创建 JavaType 而来到这里,
      然后像这样使用ObjectMapper

         JavaType javaType = objectMapper.constructType(clazz);
      

      【讨论】:

      • 是的。唔。没意识到ClassType
      猜你喜欢
      • 2016-03-14
      • 1970-01-01
      • 2021-08-19
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多