Jackson Create Javatype from Class

There must be a way to create a JavaType from String.class?

Note: The input for the method must be JavaType for my use case because that value is created dynamically using 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);
}

If I may tack on a related question, what is the advantage of constructMapType over constructParametricType?

0

2 Answers

You can do it by:

  • constructFromCanonical method. For example: typeFactory.constructFromCanonical(String.class.getName())
  • constructType method. For example: typeFactory.constructType(new TypeReference<String>() {}).
  • constructArrayType method. For example: typeFactory.constructArrayType(String.class).getContentType(). But it looks a little bit like a workaround.
  • SimpleType.constructUnsafe 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.

If you are here just because you want to create a JavaType from a Class object,
then use an ObjectMapper like so:

   JavaType javaType = objectMapper.constructType(clazz);
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

David Miller

David Miller

Executive Financial & Market Analyst

David Miller brings 15 years of experience in global economics, personal finance strategy, and market dynamics. He specializes in turning complex economic trends into actionable insights for everyday readers.

Share this article
Twitter Facebook Pinterest