我想通过Spring Jersey REST发布一对相关对象。
两个对象(作为示例):
库
public class Library {
@Id
private long id;
private String name;
@OneToMany(mappedBy="library")
private List<Book> books;
}
图书
public class Book {
@Id
private long id;
private String title;
@ManyToOne(optional = false)
private Library library;
}
{"id": 72, "title": "my book"}
{"id": 36, "name": "our library"}
现在我的最终用户希望在图书馆之间移动图书。所以,对我而言,首先要显示书籍与图书馆之间的关系似乎很有用:
{"id": 72, "title": "my book", "libraryId": 36}
然后用户可以在http://localhost/book/72
上投放{"id": 72, "title": "my book", "libraryId": 12}
用户在图书馆36和12之间移动了书。
这是Spring REST + Jersey的正常情况吗? 如何做到这一点?
通常 @ManyToOne 会被忽略(@ JsonIgnore),以防止:
{“id”:72,“title”:“我的书”,“图书馆”:{“id”:36,“name”:“我们的 库“}}
我的问题是:
问题1:如何以最简单的形式获取此'libraryId'属性?
问题2:如何在PUT / POST时将其翻译回来?
答案 0 :(得分:0)
您需要添加虚拟属性;
@JsonIgnore
@ManyToOne(optional = false)
private Library library;
public Long getLibraryId() {
library.getId();
}
public void setLibraryId(Long id) {
library.setId(id);
}
如果您将Jackson添加到pom中,如果您使用RestController注释,则会自动生成JSON
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.1-1</version>
</dependency>
这是一个春天的例子,不是泽西岛,但你明白了,杰克逊只需要在类路径中。
@RequestMapping(value = "/book", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Long update(@RequestBody Book book) {
return ...
}