Quarkus中GET请求参数接收:URL中间参数与Query参数位置疑问
1. 如何获取URL中的user_id路径参数
以Spring生态为例,你可以用@PathVariable注解绑定路径里的{user_id}参数,而且不是只能用@RequestMapping,针对GET请求更推荐用@GetMapping(它是@RequestMapping(method = RequestMethod.GET)的简写,语义更清晰)。
示例代码:
@GetMapping("/users/{user_id}/customers") public ResponseEntity<List<Customer>> getCustomerList(@PathVariable("user_id") String userId) { // 这里的userId就是URL中{user_id}对应的实际值 // 业务逻辑处理... return ResponseEntity.ok(customerList); }
如果参数名和方法变量名一致,还可以省略注解里的参数名,直接写@PathVariable String user_id。
2. 是否只能使用@RequestMapping?
当然不是。@RequestMapping是通用的请求映射注解,支持所有HTTP方法。对于GET类型的API,更推荐用@GetMapping——它专门绑定GET请求,代码更简洁,可读性更强。同理还有@PostMapping、@PutMapping等对应其他HTTP方法的注解,都是@RequestMapping的简化版。
3. Query Parameters能否放在URL中间?
不行,这不符合HTTP标准规范。Query参数(即?key=value格式的部分)必须放在URL的末尾,只有从?开始到URL结束的部分才会被识别为查询参数。你给出的示例URL /users/user_id?id=1&value=12345678/customers 是错误的,服务器会把user_id?id=1&value=12345678当成路径的一部分,不会解析id和value为查询参数,/customers也会被视为路径的后续部分,最终导致请求路径匹配失败。
如果需要传递额外参数,正确的做法是把查询参数放在URL末尾:/users/{user_id}/customers?id=1&value=12345678
内容的提问来源于stack exchange,提问作者Cesar Justo

