Spring boot HATEOAS链接内的自动连接变量

Spring boot HATEOAS链接内的自动连接变量,spring-boot,spring-hateoas,application.properties,Spring Boot,Spring Hateoas,Application.properties,无法解析Hateoas链接内的自动连线值 http://localhost:8080/${api.version}/api/messages/123 应用程序属性 api.version=v1 api.version=v1 Spring父控制器 @RequestMapping(value={"${api.version}/api"}) public class BaseRestController {} 某些控制器需要HATEOAS自链接 @RestController public cl

无法解析Hateoas链接内的自动连线值

http://localhost:8080/${api.version}/api/messages/123

应用程序属性

api.version=v1
api.version=v1
Spring父控制器

@RequestMapping(value={"${api.version}/api"})
public class BaseRestController {}
某些控制器需要HATEOAS自链接

@RestController
public class SomeController extends BaseRestController { 
// constructor

@RequestMapping(value = "/messages/{messageId}", method = RequestMethod.GET)
public ResponseEntity<Alert> getAlert(@PathVariable("messageId") String messageId) {

    Link selfLink = linkTo(methodOn(SomeController.class).getAlert(messageId, null)).withSelfRel();
    System.out.println(selfLink.getHref());

    // more code
}
@RestController
公共类SomeController扩展BaseRestController{
//建造师
@RequestMapping(value=“/messages/{messageId}”,method=RequestMethod.GET)
公共响应属性getAlert(@PathVariable(“messageId”)字符串messageId){
Link selfLink=linkTo(methodOn(SomeController.class).getAlert(messageId,null)).withSelfRel();
System.out.println(selfLink.getHref());
//更多代码
}

我可以做字符串替换,但如果有更好的方法,或者有人可能有相同的问题,请提出建议。谢谢!

由于我目前找不到答案,简单URL解析器:

应用程序属性

api.version=v1
api.version=v1
资源汇编程序

@Component
public class AlertResourceAssembler implements ResourceAssembler<Alert, Resource<Alert>> {

public static final String API_VERSION = "${api.version}";

@Value(API_VERSION)
private String apiVersion;

@Override
public Resource toResource(Alert alert) {

    String messageId = alert.getMessageId();

    Resource<Alert> resource = new Resource<>(alert);

    resource.add(createLink(Link.REL_SELF, linkTo(methodOn(SomeController .class).getAlert(messageId, null))).withSelfRel());
    resource.add(createLink("comments", linkTo(methodOn(SomeController .class).getUserComments(messageId, null))));

    return resource;
}

private Link createLink(String rel, ControllerLinkBuilder linkBuilder) {
    final Map<String, String> urlParameters = createParams();

    String href = linkBuilder.withSelfRel().getHref();
    for (Map.Entry<String, String> entry : urlParameters.entrySet()) {
        href = href.replace(entry.getKey(), entry.getValue());
    }
    return new Link(href, rel);
}

private Map<String, String> createParams() {
    Map<String, String> parameters = new HashMap<>();
    parameters.put(API_VERSION, "/" + apiVersion);
    return parameters;
}
}
@组件
公共类AlertResourceAssembler实现ResourceAssembler{
公共静态最终字符串API_VERSION=“${API.VERSION}”;
@值(API_版本)
私有字符串版本;
@凌驾
公共资源存储资源(警报){
字符串messageId=alert.getMessageId();
资源=新资源(警报);
添加(createLink(Link.REL_SELF,linkTo(methodOn(SomeController.class).getAlert(messageId,null))).withSelfRel());
add(createLink(“comments”,linkTo(methodOn(SomeController.class).getUserComments(messageId,null)));
返回资源;
}
专用链接createLink(字符串rel,ControllerLinkBuilder链接生成器){
最终映射urlParameters=createParams();
String href=linkBuilder.withSelfRel().getHref();
对于(Map.Entry:urlParameters.entrySet()){
href=href.replace(entry.getKey(),entry.getValue());
}
返回新链接(href,rel);
}
私有映射createParams(){
映射参数=新的HashMap();
参数.put(API_版本,“/”+apiVersion);
返回参数;
}
}

这应该是您的工作方式。您可以使用
@Value(${api.version})私有字符串apiVersion;
进行测试,如果属性注入在Spring framework设置中正常工作,则将值记录在适当的位置吗?我可以自动连线并记录@Value(${api.version}),但似乎没有办法使用application.properties中的值基于RequestMapping生成漂亮的hateoas url。如果您有任何Spring Boot应用程序正在运行,请尝试。无论如何,谢谢!