Java 如何将id为的json转换为实体
我有一本与出版商有着@manytone关系的类书: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
@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方法。