Java 在Spring中为控制器操作生成URL

Java 在Spring中为控制器操作生成URL,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,如何为控制器操作动态创建URL 考虑以下情况: @Controller @RequestMapping("controller") public class Controller { @RequestMapping("url") public String method() { return "Whatever" } } 我想做的是获取基本URL和它的concat控制器/URL。 例如,对于这种行为,Laravel提供了URL帮助器(action()方法

如何为控制器操作动态创建URL

考虑以下情况:

@Controller
@RequestMapping("controller")
public class Controller {
    @RequestMapping("url")
    public String method() {
        return "Whatever"
    }
}
我想做的是获取基本URL和它的concat控制器/URL。
例如,对于这种行为,Laravel提供了URL帮助器(action()方法)。Spring Boot中有类似的功能吗?

我认为使用@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/{here the value}调用该方法
示例/controller/url/www.google.com

如果要使用属性文件仅映射控制器

应用程序属性

server.context-path=/rest
spring.data.rest.basePath=/rest
如果您的控制器正在从存储库中提供数据,那么SpringDataREST可以从样板文件中取出大部分内容&解决您最初的问题

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
这就是您想要的/rest concat controller/url

,您可以使用它来获取当前url和concat的附加部分

@Controller
@RequestMapping("controller")
public class Controller {
    @RequestMapping("url")
    public String method(UriComponentBuilder ucb) {
        URI uri = ucb.path("/url").build().toUri();
        return "Whatever"
    }
}

spring启动框架有一个库。为了动态生成链接,您需要将其添加到项目中。该库的渐变依赖项如下所示

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>

这不是我要问的。你们能用例子详细说明一下吗?你们能看一下我的答案吗?我需要在那个控制器之外生成那个URL。你们的意思是,在任何映射请求的方法之外?要将请求映射到某处,你们需要知道某处的位置。该位置就是URL,因此我希望能够生成某处的URL。是的,应用程序必须至少有一个已知映射。一旦请求到达那里,您只需使用
return“redirect:/user?url=website.com”
通过传递任何请求参数/路径变量将其传递给任何其他控制器方法。除非要传递到其他应用程序,否则实际上并不需要完整的url。如果在同一个应用程序中重定向,相对路径就足够了。是的,但这意味着我必须记住给定的控制器是否有特殊的URL映射。
WebMvcLinkBuilder.linkTo(Controller.class).slash("url").withSelfRel().getHref();