Джексон не собирает аннотации к подтипам в Scala с помощью Spring Boot - PullRequest
0 голосов
/ 04 октября 2018

У меня есть контроллер покоя, который возвращает 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, чтобы их забрали?

Обновление: пробовал с помощью миксав с аннотациями перешли к этому.Затем добавил смесь в объектный картограф.Все еще нет подсказки типа ...

Обновление: я думаю, что это проблема стирания типа.Понятия не имею, как это исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...