Java SpringDataREST:如何在不需要硬编码其路径元素的情况下集成自定义端点?
我使用Spring数据REST,并将Java SpringDataREST:如何在不需要硬编码其路径元素的情况下集成自定义端点?,java,spring,spring-boot,spring-data-rest,spring-hateoas,Java,Spring,Spring Boot,Spring Data Rest,Spring Hateoas,我使用Spring数据REST,并将Spring.Data.REST.base path属性设置为/api。如果我为User实体扩展crudepository,我的RESTful服务中将有一个/api/users端点可用。现在假设,我想向/api/users添加一个自定义端点,如下所示: @RepositoryRestController 公共类用户控制器{ @补丁映射(path=“/users/{username}/update”,products=“application/hal+json”
Spring.Data.REST.base path
属性设置为/api
。如果我为User
实体扩展crudepository
,我的RESTful服务中将有一个/api/users
端点可用。现在假设,我想向/api/users
添加一个自定义端点,如下所示:
@RepositoryRestController
公共类用户控制器{
@补丁映射(path=“/users/{username}/update”,products=“application/hal+json”)
@ResponseStatus(HttpStatus.OK)
公共EntityModel updateUser(@PathVariable字符串用户名,@RequestBody用户){
//这里有一些更新逻辑。。。
返回(用户)的实体模型;
}
}
@PatchMapping
注释中的path元素仍然包含显式硬编码的/users
部分。是否有任何编程方法将其替换为指向由Spring Data REST管理的User
类型的集合资源的path变量?在类级别有@RequestMapping
。但我不太确定这就是你想要的。编辑:使用${…}
可以使用映射到本地属性(以及其他属性)的占位符。无论是在@RequestMapping
还是@PatchMapping
中,我都需要以某种方式将/users
部分替换为类似于RepositoryEntityLinks.linkFor(User.class).toString()
的内容,这看起来不可能,因为映射是在启动期间初始化的。因此,只能从属性源加载它。另外,User.class不是总是要转换为/User端点吗?因此为什么需要动态映射?这只是重构的问题。如果我将User
重命名为Person
,我将为每个@GetMapping
,@PostMapping
等手动将/users
替换为/persons
,使用像“${users.path}”这样的占位符并为此定义一个特殊的本地属性将是一个选项。尽管如此,我还是必须用@RepositoryRestResource(path=“${users.path”)
注释我的crudepository
,以确保一致性……不过,还是在寻找更好的选项。