在Spring MVC中,@requestmapping(value={"url1","url2"})
是允许的,但SpringHATEOS
在创建链接时选择第一个映射。是否有任何解决方案,其中控制器上的请求映射版本与 http 请求版本调用匹配。
假设url1
和url2
具有不同的版本并放在同一个控制器上。 控制器在内部为另一个控制器创建链接。对于这两个 URL,它使用来自控制器的第一个请求映射。但我希望它应该根据 url 调用。对于url1
,它应该使用版本 1,对于url2
它应该使用版本 2。
第一控制器
@RestController
@RequestMapping("url/v1","ur1/v2")
public class MyFirstController{
public Response<Entity> method1(){
return ResponseEntity<AnotherResponseType>(
new AnotherResponseType(argument1, argument2), HttpStatus.OK);
}
}
第二个控制器
@RestController
@RequestMapping("url/v1","ur1/v2")
public class MySecondController{
public Response<ResponseType> method1(){
return ResponseEntity<ResponseType>(
new ResponseType(argument1, argument2), HttpStatus.OK);
}}
ResponseType 使用 Spring HATEOS 创建链接。在调用版本 v2 的情况下,此响应始终在创建的链接中包含版本 v1,而不是版本 v2。
响应类型
class ResponseType{
public Response Type(String argument1, String argument2){
this.add(inkTo(methodOn(MyFirstController.class).method1(argument1,
null).withRel("link1"));
}
}
我想要的是让为 v2 创建的链接应该包含 v2 而不是 v1?
org.springframework.hateoas.mvc.ControllerLinkBuilder 类有一组方法,您可以使用它们来构建链接,例如
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
resource.add(linkTo(AuthorController.class).slash(author.getAuthorId()).slash("books").withRel("vaquar"));
// or by pointing directly to a controller method
resource.add(linkTo(methodOn(UserController.class).getUsers(author.getUserId())).withRel("vaquar"));
你可以在这里阅读
工作示例:https://github.com/corsoft/spring-hateoas-demo