我们可以在控制器中编写多个方法,并使用显式映射和路径变量组合,以排除可选变量(如果使用旧版Spring)。
在我的情况下,我想开发一个API,以获取旧设备的回收价值,其中参数可以是品牌,型号和网络,但网络是可选的。
处理此问题的一种选择是将网络用作请求参数,而不是PathVariable。例如/value/LG/g3?network = vodafone,但我不喜欢这种方法。
对我来说,更清洁的方法是使用以下内容
/refurbValue/LG/g3
/refurbValue/LG/g3/vodafone
@RequestMapping(value = "/refurbValue/{make}/{model}/{network}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
def getRefurbValueByMakeAndModelAndNetwork(@PathVariable String make, @PathVariable String model, @PathVariable String network ) throws Exception {
}
@RequestMapping(value = "/refurbValue/{make}/{model}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
def getRefurbValueByMakeAndModel(@PathVariable String make, @PathVariable String model) throws Exception {
}
在上面的例子中,两个控制器都可以使用相同的服务方法,并且可以处理参数。在我的情况下,我正在使用Groovy,因此可以轻松地使用可选参数,例如
Map getRefurbValue(String brand, String model, String network="")
@PathVariable(value = "siteId", required = false) String siteId
注解。尽管我没有找到不提供路径变量或将其留空的方法。 - Alexrequired
参数设置为false
,但仍需要提供路径参数,否则会抛出异常。 - securecurve