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 **/
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?
解决方案
You can do it by:
constructFromCanonical method. For example: typeFactory.constructFromCanonical(String.class.getName())
constructType method. For example: typeFactory.constructType(new TypeReference() {}).
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.