У меня есть следующие отношения один ко многим:
public class Product {
@Id
@SequenceGenerator(name = "product_id_seq", sequenceName = "product_id_seq")
@GeneratedValue(strategy= GenerationType.SEQUENCE,generator = "product_id_seq")
private Long pid; // initiate it for just a random value in order to hanlde hibernate bug
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="manufacturer",referencedColumnName = "id")
@JsonIdentityInfo(generator= ObjectIdGenerators.PropertyGenerator.class, property="id")
@JsonIdentityReference(alwaysAsId=true)
private Manufacturer manufacturer;
private String name;
......more data members...
и производитель:
public class Manufacturer {
@Id
@SequenceGenerator(name = "manufacturer_id_seq", sequenceName = "manufacturer_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator = "manufacturer_id_seq")
private Long id;
private String name;
private String country;
@OneToMany(mappedBy = "manufacturer",fetch = FetchType.LAZY,cascade = CascadeType.ALL, orphanRemoval = true)
private List<Product> products;
}
мое тело POST содержит следующее json:
{
"name":"chocolate",
"manufacturer": 2,
}
Сейчас я использую DTO и функцию отображения для сопоставления productDTO с продуктом:
public class ProductCreationDTO {
private String name;
private Long manufacturer;
}
private Product mapProductCreationDTOtoProduct(ProductCreationDTO pcd)
{
Product p = modelMapper.map(pcd,Product.class); // maps fields with same name that arent nested(like manufacturer)
Optional<Manufacturer> o = manufacturerService.getManufacturer(pcd.getManufacturer());
o.ifPresent(m->p.setManufacturer(m));
return p;
}
Я преуспел в этом разговоре в своих вызовах get для объектов, добавив эти 2 аннотации над объектом obj в Класс продукта:
@JsonIdentityInfo(generator= ObjectIdGenerators.PropertyGenerator.class, property="id")
@JsonIdentityReference(alwaysAsId=true)
Есть ли способ использовать Джексона (аннотации) для преобразования поста json в объект продукта (десериализация) так же, как это происходит во время остальных вызовов вызова (сериализация)?