Velvet Star Monitor

Standout celebrity highlights with iconic style.

updates

Jackson create JavaType from Class

Writer Sophia Terry

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

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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