Java 如何将id为的json转换为实体

Java 如何将id为的json转换为实体,java,rest,jax-rs,java-ee-8,Java,Rest,Jax Rs,Java Ee 8,我有一本与出版商有着@manytone关系的类书: @Entity @Table(name = "book") public class Book implements Serializable { @Id @GeneratedValue(strategy = IDENTITY) private Long id; private String title; @ManyToOne(fetch = LAZY) @JoinCol

我有一本与出版商有着@manytone关系的类书:

@Entity
@Table(name = "book")
public class Book implements Serializable {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;

    private String title;

    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "publisher_id")
    private Publisher publisher;

    //getters and setters etc

}
我正在努力解决如何配置服务器以接受post以使用以下json结构保存书籍:

{
    "title": "Purpose driven life",
    "publisher": {
        "id": 1
    }
}
我只想发送一个id为的出版商,在这种情况下,服务器将图书与id为1的出版商相关联,该出版商已经存在于数据库中,我在控制器中使用如下方法保存图书:

@POST
@Consumes(APPLICATION_JSON)
public Response save(Book book) {
    service.save(book);
    // URI creation and return statement
}
那么,我需要在我的服务器中进行哪些配置才能正确处理此问题?谢谢

[编辑]

我把请求发送到了一个错误的端点,这就是为什么我一直收到错误,在尝试对答案应用解决方案之后,我得到了相同的错误并找出了错误的端点

要将json发送到服务器,不需要任何配置,服务器以某种方式处理它并序列化


感谢您的回答和评论。

保存本书之前,请先联系出版商

假设有
findPublisherById(int publisherId)

创建一个请求模型:

公共类图书请求{
私人长id;
私有字符串标题;
私人出版商;
//接二连三
}
现在,您可以使用一个方法将BookRequest映射到Book模型(您可以随时使用此方法,我假设您将其放在服务类中):

public Book getBookFromBookRequest(BookRequest BookRequest){
Publisher-Publisher=findPublisherById(int-publisherId);
返回新书(bookRequest.getTitle(),publisher);
}
保存到服务中:

公共作废保存(BookRequest BookRequest){
Book Book=this.getBookFromBookRequest(bookRequest);
//保存这本书
}
现在,让我们修改您的请求方法:

@POST
@使用(应用程序_JSON)
公共响应保存(BookRequest BookRequest){
保存(bookRequest);
//URI创建和返回语句
}

保存时会发生什么?有任何异常吗?当我保存hibernate时,它试图持久化发布者实体,而Get a ConstraintViolationException导致atribute名称未填充。这似乎可行,让我试试,但似乎不是java ee的方法,我来自Spring Boot,我们所需要做的就是实现一个组件类,它实现给定类型的转换器接口,就是这个示例Publisher。我在回答中添加了一些细节。我希望它能帮上忙。你的答案是正确的,而且确实有效,但是服务器会自动转换,不需要调用findById方法。