Java 弹簧靴&x2B;MongoDB Id查询

Java 弹簧靴&x2B;MongoDB Id查询,java,spring,mongodb,spring-boot,Java,Spring,Mongodb,Spring Boot,我有一个Spring引导应用程序与MongoDB结合作为持久层。我的结构如下: public class Resource { @Id public String Id; ... } 我还有一个资源库: @RepositoryRestResource(collectionResourceRel = "resources", path = "resources") public interface ResourceRepository extends MongoRepository<Re

我有一个Spring引导应用程序与MongoDB结合作为持久层。我的结构如下:

public class Resource {

@Id
public String Id;
...
}
我还有一个资源库:

@RepositoryRestResource(collectionResourceRel = "resources", path = "resources")
public interface ResourceRepository extends MongoRepository<Resource, String> {
     Resource findById(@Param("Id")String Id);
}
如果我将Id属性更改为Id(小写I),我可以成功执行/resources/search/findById?Id=。。。获取请求

我尝试使用查询创建自定义控制器,该查询根据给定的id查找并返回资源:

@Controller
@RequestMapping("/resource")
public class ResourceController {

    @Autowired
    MongoOperations mongoOperations;

    @RequestMapping(value="/findById/{resourceId}/", method= RequestMethod.GET)
    @ResponseBody
    public Resource findByResourceId(@PathVariable("resourceId") String resourceId) {
        Resource resource = mongoOperations.findOne(query(Criteria.where("Id").is(resourceId)), Resource.class,"DOJ");
    }
}
但我收到了同样的错误:

org.springframework.data.mapping.context.InvalidPersistentPropertyPath: No property id found on app.model.Resource!

你知道如何在JSon中显示id属性并能够找到Dbyd吗?

我自己找到了答案。切换回小写id,以便findById工作,并将以下类添加到项目中:

@Configuration
public class SpringDataRestConfiguration extends RepositoryRestConfigurerAdapter  {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.exposeIdsFor(Resource.class);
    }
}
正如该方法的名称所示,此配置使资源类对象在JSON中公开其ID

更新:如果您使用的是最新或相对最新版本的spring boot,
RepositoryRestConfigurerAdapter
类已被弃用,java文档建议直接使用接口
RepositoryRestConfigurer

因此,您的代码应该如下所示:

@Configuration
public class SpringDataRestConfiguration implements RepositoryRestConfigurer  
...

查看以下错误:spring数据无法找到名为id(小i)的属性。您的财产是Id(大写I)。Sprint数据存储库按照约定工作,正在寻找名称id为(小i)的属性。感谢@rangalo,我理解这一点,但我的问题不是为什么会出现错误,而是如何公开id,以及如何使用id进行查询。根据约定将字段id更改为id字段名称以小写字母开头。如果您不想这样做或不能这样做,那么您将不得不使用自定义存储库而不是spring数据存储库。
@Configuration
public class SpringDataRestConfiguration implements RepositoryRestConfigurer  
...