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
?
You can do it by:
typeFactory.constructFromCanonical(String.class.getName())
typeFactory.constructType(new TypeReference<String>() {})
.typeFactory.constructArrayType(String.class).getContentType()
. But it looks a little bit like a workaround.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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With