如何动态创建Controller操作的URL?
考虑以下情况:
@Controller
@RequestMapping("controller")
public class Controller {
@RequestMapping("url")
public String method() {
return "Whatever"
}
}
我想要做的是获取基本URL和concat controller / url。 对于此行为,Laravel例如提供了URL帮助程序(action()方法)。 Spring Boot中有类似的东西吗?
答案 0 :(得分:1)
我认为使用@PathVariable可以帮助你
@Controller
@RequestMapping(value="/controller")
public class Controller {
@RequestMapping(value="/url/{id}", method=RequestMethod.GET)
public String method(@PathVariable("id") String id) {
System.out.println("the url value : "+id );
return "Whatever"
}
}
然后你可以用/ controller / url / {这里的值}来调用方法 示例/controller/url/www.google.com
答案 1 :(得分:1)
您可以使用UriComponentBuilder
获取当前网址并将其他部分连接到其中
@Controller
@RequestMapping("controller")
public class Controller {
@RequestMapping("url")
public String method(UriComponentBuilder ucb) {
URI uri = ucb.path("/url").build().toUri();
return "Whatever"
}
}
答案 2 :(得分:1)
存在一个用于Spring Boot框架的库。您需要在项目中添加以动态生成链接。该库的gradle依赖性如下所示。
compile 'org.springframework.boot:spring-boot-starter-hateoas:2.1.4.RELEASE'
我假设您的构建系统是gradle,但是如果您使用的是maven,请使用以下语法。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
之后,您可以如下所示动态生成链接。
WebMvcLinkBuilder.linkTo(Controller.class).slash("url").withSelfRel().getHref();
答案 3 :(得分:-1)
如果您想使用属性文件
仅映射Controllerapplication.properties
server.context-path=/rest
如果您的控制器正在从存储库提供数据,那么Spring Data REST可以取出大部分样板和文件。解决你最初的问题。
<强> Spring Data REST 强>
的pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
您可以使用属性文件控制基本URL。
application.properties
spring.data.rest.basePath=/rest
你想要/休息concat controller / url