Джексон создал JavaType из класса - PullRequest
1 голос
/ 25 марта 2020

Должен быть способ создания JavaType из String.class?

Примечание: вход для метода должен быть 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);
}

Если я могу задать связанный вопрос, в чем преимущество constructMapType над constructParametricType?

1 Ответ

2 голосов
/ 06 апреля 2020

Вы можете сделать это следующим образом:

  • метод constructFromCanonical . Например: typeFactory.constructFromCanonical(String.class.getName())
  • constructType метод. Например: typeFactory.constructType(new TypeReference<String>() {}).
  • constructArrayType метод. Например: typeFactory.constructArrayType(String.class).getContentType(). Но это выглядит как обходной путь.
  • SimpleType.constructUnsafe метод. Например: SimpleType.constructUnsafe(String.class). Примечание из документации: Метод, используемый основными классами Джексона: НЕ должен использоваться кодом приложения: он НЕ обрабатывает должным образом супертипы, поэтому ни родительские классы, ни реализованные интерфейсы не доступны с результирующим экземпляром типа. Таким образом, даже можно использовать попытаться избежать этого.
...