Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringDataREST:如何在不需要硬编码其路径元素的情况下集成自定义端点?_Java_Spring_Spring Boot_Spring Data Rest_Spring Hateoas - Fatal编程技术网

Java SpringDataREST:如何在不需要硬编码其路径元素的情况下集成自定义端点?

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数据REST,并将
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
,以确保一致性……不过,还是在寻找更好的选项。