在带有 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) {
...
}
要添加一本书,书名和作者 ID 应作为 json 对象发送。
{"title": "Harry Potter", "author": "123"}
但是,杰克逊似乎无法让作者脱离给定的作者 ID。
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; }