Десериализовать 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, похоже, что при проверке того, что тип обратной ссылки соответствует типу ссылки, он не проверяет содержащийся тип коллекции на стороне обратной ссылки.