我正在做一个Spring web。对于控制器方法,我可以使用Request estParam来指示是否需要参数。例如:
@RequestMapping({"customer"})
public String surveys(HttpServletRequest request,
@RequestParam(value="id", required = false) Long id,
Map<String, Object> map)
我想使用PathVariable,例如以下内容:
@RequestMapping({"customer/{id}"})
public String surveys(HttpServletRequest request,
@PathVariable("id") Long id,
Map<String, Object> map)
如何指示是否需要path变量?我需要将其设置为可选的,因为创建新对象时,在保存之前没有可用的关联ID。
谢谢你的帮助!
VTTom的解决方案是正确的,只需将“value”变量更改为array并列出所有url可能性:value={“/”,“/{id}}}
@RequestMapping(method=GET, value={"/", "/{id}"})
public void get(@PathVariable Optional<Integer> id) {
if (id.isPresent()) {
id.get() //returns the id
}
}
没有办法使其可选,但您可以创建两个方法,其中一个具有@Request estMap({"客户"})
注释,另一个具有@Request estMap({"客户/{id}"})
,然后在每个方法中相应地执行操作。
我知道这是一个老问题,但是搜索“可选路径变量”会让这个答案很高,所以我认为值得指出的是,自从Spring 4.1使用Java1.8以来,使用java.util.可选类是可能的。
一个例子是(注意该值必须列出所有需要匹配的潜在路由,即。有id路径变量而没有。Props to@martin-cmarko以指出这一点)
@RequestMapping(method=GET, value={"/", "/{id}"})
public void get(@PathVariable Optional<Integer> id) {
if (id.isPresent()) {
id.get() //returns the id
}
}