gpt4 book ai didi

Spring Boot : RequestMapping

转载 作者:行者123 更新时间:2023-12-04 23:39:58 27 4
gpt4 key购买 nike

我有以下三个 REST API 方法:

@RequestMapping(value = "/{name1}", method = RequestMethod.GET)
public Object retrieve(@PathVariable String name1) throws UnsupportedEncodingException {
return configService.getConfig("frontend", name1);
}

@RequestMapping(value = "/{name1}/{name2}", method = RequestMethod.GET)
public Object retrieve(@PathVariable String name1, @PathVariable String name2) throws UnsupportedEncodingException {
return configService.getConfig("frontend", name1, name2);
}

@RequestMapping(value = "/{name1}/{name2}/{name3}", method = RequestMethod.GET)
public Object retrieve(@PathVariable String name1, @PathVariable String name2, @PathVariable String name3) {
return configService.getConfig("frontend", name1, name2,name3);
}

getConfig 方法被配置为接受多个参数,如:
 public Object getConfig(String... names) {

我的问题是:是否可以仅使用一种方法/RequestMapping 来实现上述 RequestMapping ?

谢谢。

最佳答案

简单的做法

您可以使用 /**在您的映射中获取任何 URL,然后从映射路径中提取所有参数。 Spring 有一个常量,它允许您从 HTTP 请求中获取路径。您只需删除映射中不必要的部分并拆分其余部分即可获得参数列表。

import org.springframework.web.servlet.HandlerMapping;

@RestController
@RequestMapping("/somePath")
public class SomeController {

@RequestMapping(value = "/**", method = RequestMethod.GET)
public Object retrieve(HttpServletRequest request) {
String path = request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();
String[] names = path.substring("/somePath/".length()).split("/");
return configService.getConfig("frontend", names);
}

}

更好的方法

但是,路径变量应该用于识别应用程序中的资源,而不是作为给定资源的参数。在这种情况下,建议坚持使用简单的请求参数。
http://yourapp.com/somePath?name=value1&name=value2

您的映射处理程序看起来更简单:
@RequestMapping(method = RequestMethod.GET)
public Object retrieve(@RequestParam("name") String[] names) {
return configService.getConfig("frontend", names);
}

关于 Spring Boot : RequestMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908784/

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