При обновлении Джонго 1.3.0 мы начали, чтобы получить следующее сообщение об ошибке при чтении документов из MongoDB:Дата и «полиморфный» класс вызывает JsonGenerationException: BsonSerializer могут быть использованы только с BsonGenerator
com.fasterxml.jackson.core.JsonGenerationException: BsonSerializer can only be used with BsonGenerator
После некоторого тестирования I что проблема возникает при использовании @JsonTypeInfo
, а документ MongoDB содержит объект даты до тип свойства. Дано:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = 'type',
visible = true)
@JsonSubTypes([
@JsonSubTypes.Type(name = 'a', value = A),
@JsonSubTypes.Type(name = 'b', value = B)
])
abstract class Base {
String string // For reference
Date date
String type
}
class A extends Base { A() { type = 'a' } }
class B extends Base { B() { type = 'b' } }
Это (Spock) тест проваливается
def mapper = new ObjectMapper(new BsonFactory()).registerModule(new BsonModule())
def bytes = mapper.writeValueAsBytes(original)
expect:
def parsed = mapper.readValue(bytes, Base)
parsed instanceof A // com.fasterxml.jackson.core.JsonGenerationException: BsonSerializer can only be used with BsonGenerator
parsed.string == original.string
parsed.date == original.date // parsed.date is null with 'de.undercouch:bson4jackson:2.8.0-SNAPSHOT'
parsed.type == original.type
where:
testCase | original
'A' | new A(string: 'string', date: new Date(), type: 'a') // fails
'String, Date, Type' | [string: 'string', date: new Date(), type: 'a'] // fails
'String, null date, Type' | [string: 'string', date: null, type: 'a']
'String, Type, Date' | [string: 'string', type: 'a', date: new Date()]
'Type, String, Date' | [type: 'a', string: 'string', date: new Date()]
Обратите внимание, что если date
является недействительным или приходит после того, как type
тест проходит.
Я хотел бы обновить Jongo и Jackson, но не думаю, что могу гарантировать порядок свойств на нашей БД. Вопрос в том, можно ли решить проблему.
- Я пробовал обновить Jackson до 2.8.6 и 2.8.7, но без разницы.
- Когда я пытаюсь
de.undercouch:bson4jackson:2.8.0-SNAPSHOT
разобранныйdate
будет нулевым, если он приходит после того, какtype
Подобная ошибка, кажется, была решена с 2.8.0-SNAPSHOT: https://github.com/michel-kraemer/bson4jackson/issues/67
Я разместил вопрос здесь: https://github.com/michel-kraemer/bson4jackson/issues/72
Вы нашли решение этой проблемы? Мы сталкиваемся с одной и той же проблемой и используем de.undercouch: bson4jackson: 2.8.0-SNAPSHOT не решает проблему. – user3495469