我的SpringBoot控制器的一个终结点定义为:
@GetMapping(path = "/{custId}/items", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@AuthorizationValidationStrategy
public List<ItemDTO> getCustItemsByItemType(@PathVariable @SecureResource(CUST) Long custId, @RequestParam("itemType") List<ItemType> itemTypes) {
return this.myFeignClient.findItemsByCustIdAndItemTypes(custId, itemTypes);
}
其中ItemType
是遵循我们部门编码约定的枚举,因此所有枚举常量("枚举实例")都将被命名为ALL_UPPER_CASE.
当查询以大写形式指定项目类型时,此终结点可以很好地工作.
如果项类型指定为小写,则Spring会立即抛出异常,而不会在将其传递给feign客户端之前将其大写.这是意料之中的,我理解为什么.
有没有办法使这样的终结点变得"灵活",即它可以平等地接受小写和大写的枚举常量?
例如:
http://127.0.0.1:8080/1.0/custs/2/items?itemType=bread
http://127.0.0.1:8080/1.0/custs/2/items?itemType=BREAD
我实际上使用众所周知的@JsonCreator
技术实现了这个枚举,虽然它的比较不区分大小写,但HTTP请求永远不会达到这个阶段.