@RequestMapping 和绑定的泛型参数

@RequestMapping & Bound Generic Paramters

以下 @RequestMapping 为 Spring Boot 1.5/Java 8.

中的 @RestController 生成了不明确的请求映射

有没有办法 'negate' 第一种方法的通用约束不包含 Iterable?我宁愿保留相同的方法名称、路径等。 (即)带有数组的 post 将转到一种方法,而单个项目的 post 将转到第二种方法。

@RequestMapping(method = RequestMethod.POST, value="/foo")
public T save(T item){
    ...
}
@RequestMapping(method = RequestMethod.POST, value="/foo")
public Iterable<T> save(Iterable<T> items){
    ...
}

你的映射显然有歧义。

您需要为每个保存的类型指定不同的端点,或者您可以通过 @RequestMapping 注释的元素缩小映射范围。

例如你可以这样实现:

@RequestMapping(method = RequestMethod.POST, value="/foo", params="item")
public T save(T item){
    ...
}
@RequestMapping(method = RequestMethod.POST, value="/foo", params="items")
public Iterable<T> save(Iterable<T> items){
    ...
}

或者,使用 headers:

@RequestMapping(method = RequestMethod.POST, value="/foo", headers="Input-Type=item")
public T save(T item){
    ...
}
@RequestMapping(method = RequestMethod.POST, value="/foo", headers="Input-Type=items")
public Iterable<T> save(Iterable<T> items){
    ...
}