Java 在Spring中为控制器操作生成URL
如何为控制器操作动态创建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()方法
@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();