@Jacksoninject + @jsoncreator + ObjectMapper + Spring BootJAVA

Программисты JAVA общаются здесь
Anonymous
@Jacksoninject + @jsoncreator + ObjectMapper + Spring Boot

Сообщение Anonymous »

Это почти тот же вопрос, что и этот, но ему 9 лет, и он никогда не получил ответа (комментарий не объясняет, как они на самом деле исправили его - просто дает короткий намек). Я уверен, что идеальная реализация - создать нестандартный десериализатор. Однако, чтобы ограничить изменения в существующем коде (по бизнес -причинам), я бы предпочел получить доступ к ObjectMapper , используемому Spring Boot, чтобы починить сам объект. Насколько я понимаю, я должен быть в состоянии достичь этого, используя @jacksoninject < /code>.
Однако десериализация не спускается с ошибкой, аналогичной: < /p>

Код: Выделить всё

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Conflicting setter definitions for property "defaultPropertyInclusion": com.fasterxml.jackson.databind.ObjectMapper#setDefaultPropertyInclusion(com.fasterxml.jackson.annotation.JsonInclude$Value) vs com.fasterxml.jackson.databind.ObjectMapper#setDefaultPropertyInclusion(com.fasterxml.jackson.annotation.JsonInclude$Include)
Это, кажется, указывает на то, что ObjectMapper пытается Deserialize ObjectMapper .
Ниже приведен простой тест, показывающий мой вариант использования с 3 простыми классами:
@JsonTest
class FooTest {
@Autowired
private JacksonTester tester;
@Autowired
private JacksonTester tester2;

@Test
void foo() throws Exception {
// Arrange
// Act
final var target = tester.parseObject("""
{
"bar": "baz",
"baz": {
"other": "qux"
}
}
""");

// Assert
assertThat(target.bar()).isEqualTo("baz");
assertThat(target.baz().other()).isEqualTo("qux");
}

@Test
void foobar() throws Exception {
// Arrange
// Act
final var target = tester2.parseObject("""
{
"bar": "baz",
"baz": "{\\"bar\\": \\"qux\\"}"
}
""");

// Assert
assertThat(target.bar()).isEqualTo("baz");
assertThat(target.baz().other()).isEqualTo("qux");
}

record Foo(String bar, Bar baz) {}

record Bar(String other) {}

record Foobar(String bar, Bar baz) {
@JsonCreator
public static Foobar fromJson(String bar, String baz, @JacksonInject ObjectMapper mapper)
throws JsonProcessingException {
final var barObj = mapper.readValue(baz, Bar.class);
return new Foobar(bar, barObj);
}
}
}

И он получает те же противоречивые определения сеттера ... ошибка.
Я просто пытаюсь сделать что -то, что не поддерживается?

Подробнее здесь: https://stackoverflow.com/questions/797 ... pring-boot

Вернуться в «JAVA»