@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){
...
}
以下 @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){
...
}