我想在Spring(SpringBoot)应用程序中将数据作为Restful API公开。 Spring Data Rest似乎非常适合此活动。
此数据库对我的应用程序需求是只读的。默认提供所有HTTP方法。是否有可用于限制(实际上阻止)其他方法暴露的配置?
答案 0 :(得分:23)
来自Hiding repository CRUD methods上的Spring文档:
16.2.3。隐藏存储库CRUD方法
如果您不想公开保存或删除方法 CrudRepository,你可以使用@RestResource(exported = false) 通过覆盖要关闭和放置的方法进行设置 覆盖版本的注释。例如,要防止HTTP 用户从调用CrudRepository的删除方法,覆盖所有 他们并将注释添加到重写方法。
@RepositoryRestResource(path = "people", rel = "people") interface PersonRepository extends CrudRepository<Person, Long> { @Override @RestResource(exported = false) void delete(Long id); @Override @RestResource(exported = false) void delete(Person entity); }
将两个删除方法重写为导出器非常重要 目前使用一种有点天真的算法来确定哪个CRUD 为了更快的运行时性能而使用的方法。不是 目前可以关闭带ID的删除版本 但是保留导出实体实例的版本。为了 暂时,您可以导出删除方法。如果你 想要关闭它们,然后记住你必须注释它们 export = false的版本。
答案 1 :(得分:8)
截至2018年初,现在有ability to only expose repository methods explicitly declared for exposure(DATAREST-1176
)
请参阅RepositoryRestConfiguration
Export false at Type level does not allow overriding with export true at Method level票证(DATAREST-1034
)已打开,但已作为DATAREST-1176
的副本关闭。奥利弗吉尔克说:
我将根据DATAREST-1176的版本解决此问题 现在可以随时重新打开,以防万一你需要的其他东西。
它们不是完全相同的,1034
中描述的功能会更加用户友好,但现在至少有一些选项。