lap*_*ots 9 spring-data-rest spring-boot
我有一个实体
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Column(name = "id", unique = true, nullable = false)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
我像这样初始化它
@PostConstruct
public void init() {
List<String> newFiles = this.listFiles();
newFiles.forEach(filename -> {
Book book = new Book();
book.setName(filename);
dbRepository.save(book);
});
}
Run Code Online (Sandbox Code Playgroud)
如果我将结果设置为save实例Book,我可以得到它id并且它不是null-so id被创建好了.
我定义了一个存储库
@RepositoryRestResource
public interface IBooksRepository extends CrudRepository<Book, Long> {
}
Run Code Online (Sandbox Code Playgroud)
我想用它来获取并将数据设置到books数据库中的表中.
当我尝试访问我的repository rest使用时curl localhost:8080/books,我得到了这个回复
{
"_embedded":{
"books":[
{
"name":"simple-file.txt",
"_links":{
"self":{
"href":"http://localhost:8080/books/1"
},
"book":{
"href":"http://localhost:8080/books/1"
}
}
}
]
},
"_links":{
"self":{
"href":"http://localhost:8080/books"
},
"profile":{
"href":"http://localhost:8080/profile/books"
}
}
}
Run Code Online (Sandbox Code Playgroud)
该books元素返回name唯一的.我怎样才能让它回归id,与...相同name?
Ral*_*ert 12
Spring Data Rest 默认隐藏 ID,为了让它在JSON中你必须为你的实体手动配置它.根据您的弹簧版本,您可以提供自己的配置(旧):
@Configuration
public class ExposeEntityIdRestConfiguration extends RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Book.class);
}
}
Run Code Online (Sandbox Code Playgroud)
...或注册RepositoryRestConfigurer(当前):
@Component
public class ExposeEntityIdRestMvcConfiguration extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Book.class);
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅Spring Data Rest文档.
接受的答案会覆盖已弃用的方法。这是更新的版本:
@Component
public class RestConfig implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.exposeIdsFor(Book.class);
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是RepositoryRestConfigurer在带@SpringBootApplication注释的类中实现:
@SpringBootApplication
public class MyApplication implements RepositoryRestConfigurer {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
config.exposeIdsFor(Book.class);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5070 次 |
| 最近记录: |