提问者:小点点

Spring MVC:如何指示是否需要path变量?


我正在做一个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。

谢谢你的帮助!


共3个答案

匿名用户

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
  }
}