В системе книжной библиотеки с Dropwizard (с Jackson и Hibernate) есть следующие классы:
@Entity
@Table(name="author")
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="name")
private string name;
// some more properties
}
@Entity
@Table(name="book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name="title")
private string title;
// some more properties
}
@POST
public void addBook(Book book) {
...
}
Чтобы добавить книгу, название книги и идентификатор автора должны быть отправлены в виде объекта json.
{"title": "Harry Potter", "author": "123"}
Однако похоже, что Джексон не может вывести автора из заданного идентификатора автора.
Error 400 Can not instantiate value of type [simple type] from Integral number; no single-int-arg constructor/factory method (through reference chain)
Есть ли способ настроить отображение из JSON запроса в объект книги и из authorId в автора без создания временного объекта, такого как
class TempBook { string title; long authorId; }