gpt4 book ai didi

java - SpringBoot - RequestMapping 获取路径作为变量?

转载 作者:行者123 更新时间:2023-12-04 08:31:12 26 4
gpt4 key购买 nike

关于如何获取 Spring 请求映射(GET 映射、POST 映射...)、路径(路由)参数作为变量的小问题。一些背景知识,我们目前有一个用例,我们采用路由、计算一些信息(灾难恢复 URL、测试 URL、最可用的 URL,但问题不在这里)并回复。这只是问题中更具体的部分示例。

查询http://the-main-host.com/firstRoute我们返回http://go-to-region-us-west3.com/firstRoute也许几分钟后,我们返回 http://go-to-region-eu-central.com/firstRoute , 但同样,这不是问题。

@GetMapping(path = "/{id}/firstRoute", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<String> question(@PathVariable @NotBlank final String id, String url) {
String theUrlEnrichedWithOtherInformation = computeExtraInformationForURL(id, url);
return Mono.just(theUrlEnrichedWithOtherInformation + id + "/firstRoute");
}

随着时间的推移,我们现在拥有大约 300 个这样的处理程序,所有这些处理程序都有真实的用例

@PostMapping(path = "/{id}/twoHundredAndFiveRoute", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<String> question(@PathVariable @NotBlank final String id, String url) {
String theUrlEnrichedWithOtherInformation = computeExtraInformationForURL(id, url);
return Mono.just(theUrlEnrichedWithOtherInformation + id + "/twoHundredAndFiveRoute");
}

@GetMapping(path = "/{id}/twoHundredSixtySevenRoute", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<String> question(@PathVariable @NotBlank final String id, String url) {
String theUrlEnrichedWithOtherInformation = computeExtraInformationForURL(id, url);
return Mono.just(theUrlEnrichedWithOtherInformation + id + "/twoHundredSixtySevenRoute");
}

我们设法通过使用路径注释的 Spring 数组使其更易于维护。这种做法更好一些,它把我们两百个方法减少到个位数。我们想继续使用这种方式是可能的。但是,我们丢失了调用路径的信息。

@GetMapping(path = {"/{id}/firstRoute", "/{id}/twoHundredSixtySevenRoute"}, produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<String> question(@PathVariable @NotBlank final String id, String url) {
String theUrlEnrichedWithOtherInformation = computeExtraInformationForURL(id, url);
return Mono.just(theUrlEnrichedWithOtherInformation + id + getThePathThatWasUsedFromTheArrayPlease());
}

是否有可能取回它,就像在这个推测性示例中一样?

最佳答案

您需要访问HttpServletRequest 实例。这有很多关于 http 调用的信息。

Spring 为我们提供了一种访问此实例的简单方法:

@RequestMapping(value = "/report/{objectId}", method = RequestMethod.GET)
public @ResponseBody void generateReport(
@PathVariable("objectId") Long objectId,
HttpServletRequest request) {

}

如果您有权访问HttpServletRequest,您可以获得url的任何部分:

示例:http://myhost:8080/people?lastname=Fox&age=30

String uri = request.getScheme() + "://" +   // "http" + "://
request.getServerName() + // "myhost"
":" + // ":"
request.getServerPort() + // "8080"
request.getRequestURI() + // "/people"
"?" + // "?"
request.getQueryString(); // "lastname=Fox&age=30"

request.getRequestURI() 应具有您需要的路径值。

关于java - SpringBoot - RequestMapping 获取路径作为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65015368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com