Java 在将应用程序迁移到SpringBoot后使用SpringDataREST时,我注意到带有@Id的实体属性不再编组为JSON
此问题与此SO问题()相关。我观察到,在将应用程序迁移到Spring Boot并使用Spring Boot starter数据rest依赖项之后,我的entity@Id字段不再在生成的JSON中编组 这是我的请求映射,在调试时,我可以看到数据在返回之前没有被更改,因此@Id属性稍后会被剥离Java 在将应用程序迁移到SpringBoot后使用SpringDataREST时,我注意到带有@Id的实体属性不再编组为JSON,java,json,spring,spring-boot,spring-data-rest,Java,Json,Spring,Spring Boot,Spring Data Rest,此问题与此SO问题()相关。我观察到,在将应用程序迁移到Spring Boot并使用Spring Boot starter数据rest依赖项之后,我的entity@Id字段不再在生成的JSON中编组 这是我的请求映射,在调试时,我可以看到数据在返回之前没有被更改,因此@Id属性稍后会被剥离 @RequestMapping(method = RequestMethod.GET, produces = {"application/json"}) public PagedResources<Re
@RequestMapping(method = RequestMethod.GET, produces = {"application/json"})
public PagedResources<Receipt> receipts(Pageable pageable, PagedResourcesAssembler assembler) {
Page<Receipt> receipts = receiptRepository.findByStorerAndCreatedDateGreaterThanEqual("003845", createdStartDate, pageable);
PagedResources<Receipt> pagedResources = assembler.toResource(receipts, receiptResourceAssembler);
return pagedResources;
}
@RequestMapping(method=RequestMethod.GET,products={“application/json”})
公共PagedResources收据(Pageable Pageable,PagedResourcesAssembler汇编程序){
PageReceipts=receiptRepository.FindBystoreandCreatedDateCreateTaneQual(“003845”,createdStartDate,可分页);
PagedResources PagedResources=assembler.toResource(收据,收据资源汇编程序);
返回页面资源;
}
是否存在允许我在生成的JSON中保留@Id字段的设置,因为我的应用程序允许用户按该值搜索
谢谢:)默认情况下,Spring数据Rest不会吐出ID。但是,您可以通过方法有选择地启用它。您可以在配置中这样做
@Configuration
public static class RepositoryConfig extends
RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Class1.class, Class2.class);
}
}
从SpringDataREST2.4开始(如果使用SpringBoot1.3.0.M5,这是一个可传递的依赖项),您可以使用。比如说,
@Configuration
class SpringDataRestConfig {
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer() {
return new RepositoryRestConfigurerAdapter() {
@Override
public void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Class1.class, Class2.class);
}
}
}
}
在公开Id之前,请阅读以下内容: 在REST中,资源的id是其URI。客户端没有显式使用id来构建url。例如,您可以用uuid替换您的id。甚至更改url方案
@Id annotation在您的模型类中发挥神奇的作用
public class Location {
@Id
private String woeid;
private String locationName;
然后,您的mongo对象将如下所示:
{
"_id" : "2487889",
"_class" : "com.agilisys.weatherdashboard.Location",
"locationName" : "San Diego, CA"
}
放
@getter、@setters和它将公开json结果,希望它能帮助您应该注意的是,如果您使用spring boot,您需要扩展
SpringBootRepositoryRestMvcConfiguration
而不是RepositoryRestMvcConfiguration
,并使其成为一个普通类而不是静态类,configureRepositoryRestConfiguration
方法应该通过扩展repositoryrestconfiguureradapter
类来覆盖。不要忘记现在为实体类中的id字段支持getter和setter!。。(我忘了,搜索了很多时间)SpringBoot 1.3中有没有允许在默认情况下一次公开所有id的设置?或者我必须在RepositoryConfig类中手动列出它们吗/对于最新的spring版本,这是正确的答案(除了缺少的分号)。请查看是否需要公开所有实体的标识符,或者只公开那些扩展或实现特定超类或接口的实体的标识符。