Десериализовать JsonManagedReference во многих отношениях - PullRequest
0 голосов
/ 16 апреля 2019

Десериализовать JsonManagedReference во многих отношениях ко многим

Джексон Версия: 2.9.7

Объекты со связью ManyToMany, которая управляется @ JsonManagedReference / @ JsonBackReference, не могут быть десериализованы. Это проще всего показать на примере.

public class JsonReferenceTest {
    class Customer {
        @JsonManagedReference("users")
        public Collection<User> users = new ArrayList<>();

        public String name = "company";
    }

    class User {
        @JsonBackReference("users")
        public Collection<Customer> customers = new ArrayList<>();

        public String name = "user";
    }
    ObjectMapper objectMapper = new ObjectMapper();

    @Test
    public void testDeserialize() throws IOException {
        String customer = "{\"name\":\"asdf\"}";

        objectMapper.readValue(customer, Customer.class);
    }
}

Выполнение следующих результатов теста в:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'users': back reference type (java.util.Collection) not compatible with managed type (com.widewail.JsonReferenceTest$Customer)
 at [Source: (String)"{"name":"asdf"}"; line: 1, column: 1]

Копаясь в BeanDeserializerBase, похоже, что при проверке того, что тип обратной ссылки соответствует типу ссылки, он не проверяет содержащийся тип коллекции на стороне обратной ссылки.

1 Ответ

0 голосов
/ 16 апреля 2019

Как сказано в документации от JsonBackReference, вы не можете использовать ее с коллекцией.

Аннотация, используемая для указания того, что связанное свойство является частью
двусторонней связи между полями;и что его роль - «дочерняя» (или «обратная») ссылка.Тип значения свойства должен быть bean-компонентом: это не может быть коллекция, карта, массив или перечисление .

Вы можете использовать JsonIdentityInfo как описано здесь .

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