我们可以在控制器中编写多个方法,并使用路径变量组合进行显式映射以排除可选变量(如果使用旧版本的 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 {
//logic here
}
@RequestMapping(value = "/refurbValue/{make}/{model}", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
def getRefurbValueByMakeAndModel(@PathVariable String make, @PathVariable String model) throws Exception {
//logic here
}
在上面的例子中,两个控制器可以使用相同的服务方法并且可以完成参数的处理。就我而言,我使用的是 Groovy,因此它很容易与可选参数一起使用,例如
Map getRefurbValue(String brand, String model, String network="")