在控制器方法中,如果方法参数为
@PathVariable Map<String, String>
然后使用所有路径变量名称和值填充映射。 这是真的吗?
提前谢谢!
答案 0 :(得分:1)
@PathVariable
用于区分端点,并且不应用于将收集数据发送到控制器,例如假设我的端点之一为/list/{vehicletype}/{fuel}
{vehicletype}
和{fuel}
都是路径变量。
现在,如果我将汽车用作车辆类型并将汽油用作燃料,则我的终点是/list/car/petrol
,以获取所有使用汽油行驶的汽车的清单
我也可以将自行车作为车辆类型,将电动作为燃料列出所有使用电的自行车。我的终点是这样的情况将是/list/bike/electric
因此,您可以看到借助路径变量使同一端点动态化。另外,由于path变量使用浏览器url中的数据,因此它将占用1028个字符。
如果您需要将数据发送到控制器,请使用@RequestBody
。如果您想验证其是否为空以进行数据验证,请实现自己的验证器并使用@Valid
批注
答案 1 :(得分:1)
该映射将填充所有路径变量名称和值。这是真的吗?
您始终可以尝试一下。简而言之,答案是是。从@PathVariable
文档中:
注释,指示方法参数应绑定到URI模板变量。支持
RequestMapping
带注释的处理程序方法。如果方法参数为
Map<String, String>
,则将使用所有路径变量名称和值填充映射。
请考虑以下控制器方法:
@GetMapping("/{param1}/{param2}")
public ResponseEntity<Void> get(@PathVariable Map<String, String> values) {
System.out.println(values);
return ResponseEntity.ok().build();
}
对于诸如以下的请求
GET /foo/bar HTTP/1.1
Host: example.org
它将打印:
{param1=foo, param2=bar}
答案 2 :(得分:1)
@PathVariable 是Spring注释,它指示方法参数应绑定到URI模板变量。 如果方法参数为Map,则将使用所有路径变量名称和值填充地图。
示例:
@ResponseStatus(value = HttpStatus.OK)
@GetMapping(value = "/book/{author}/{title}")
public void process3(@PathVariable Map<String, String> vals) {
logger.info("{}: {}", vals.get("author"), vals.get("title"));
}