在Spring中为Controller操作生成URL

时间:2017-12-07 09:17:41

标签: java spring spring-mvc spring-boot

如何动态创建Controller操作的URL?

考虑以下情况:

@Controller
@RequestMapping("controller")
public class Controller {
    @RequestMapping("url")
    public String method() {
        return "Whatever"
    }
}

我想要做的是获取基本URL和concat controller / url。 对于此行为,Laravel例如提供了URL帮助程序(action()方法)。 Spring Boot中有类似的东西吗?

4 个答案:

答案 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)

如果您想使用属性文件

仅映射Controller

application.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