У меня есть контроллер покоя, который возвращает ResponseEntity [A [B]], но тип B - это характеристика с аннотациями для подсказок типа.Эти типовые подсказки не собраны.Если я возвращаю ResponseEntity [B], то он работает нормально.Каким-то образом, если он будет на один уровень глубже, он не сможет работать.Типы выглядят так:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes(
Array(
new JsonSubTypes.Type(value = classOf[B1], name = "B1"),
new JsonSubTypes.Type(value = classOf[B2], name = "B2")
)
)
trait B {
def name: String
}
case class B1(name: String)
case class B2(name: String)
case class A[T](id: Int, data: T)
Экспериментируя, я пробовал это:
objectMapper.writeValueAsString(B1("foo"))
Тип подсказка присутствует, как и ожидалось.Тогда я попробовал это:
objectMapper.writeValueAsString(A(1, B1("foo")))
Это не включает подсказку типа.Но если я сделаю это, это сработает:
objectMapper.writeFor(new TypeReference[A[B]] {}).writeValueAsString(A(1, B1("foo")))
Я предполагаю, что где-то в недрах Spring Boot вызывается метод writeValueAsString (или что-то подобное), но я нене знаю, как получить эту запись для .Поиск каких-либо опций конфигурации сопоставления объектов объекта SerializationFeature, но не нашел ничего подходящего.
Что касается Spring Boot и Jackson, то это вещи, которые я не могу изменить.И я бы предпочел не менять базовую структуру типов, так как это потребовало бы изменений не только для моих вещей, но и для всех остальных в команде, и могло бы потребовать довольно большого количества рефакторинга.Но если это ЕДИНСТВЕННЫЙ способ, которым это может работать ...
У кого-нибудь есть какие-либо идеи о том, как я могу получить эти аннотации типа B, чтобы их забрали?
Обновление: пробовал с помощью миксав с аннотациями перешли к этому.Затем добавил смесь в объектный картограф.Все еще нет подсказки типа ...
Обновление: я думаю, что это проблема стирания типа.Понятия не имею, как это исправить.