Spring MVC 有没有办法为没有请求参数的请求和有请求参数的请求定义不同的处理程序?
有一个简单的控制器:
@RestController
@RequestMapping("/strategies")
public class StrategyController {
...
@GetMapping
public List<Strategy> getAll() {
return service.getBeans().stream()
.map(mapper::toDto)
.collect(toList());
}
@GetMapping
public List<Strategy> search(StrategyFilter filter) {
return service.search(new StrategySearchSpecification(
filter.getCode(),
filter.getName(),
filter.getType()
)).stream()
.map(mapper::toDto)
.collect(toList());
}
}
我想要getAll()方法来处理没有请求参数的请求: /strategies
我想要search(StrategyFilter filter)方法来处理带有请求参数的请求: /strategies?name=SomeName&type=SomeType
似乎无法通过params属性来区分这种情况,因为可以省略@GetMapping任何属性。StrategyFilter
在此配置中,我得到一个明显的错误:
Caused by: java.lang.IllegalStateException: Ambiguous mapping.
Cannot map 'strategyController' method
public List<Strategy> StrategyController.getAll() to {[/strategies],methods=[GET]}:
There is already 'strategyController' bean method public List<Strategy> StrategyController.search(StrategyFilter) mapped.
当然也可以这样写:
@GetMapping
public List<Strategy> get(StrategyFilter filter) {
return noFilterProvided(filter) ? getAll() : search(filter);
}
但是每次过滤器的属性数量发生变化时,都需要更改“noFilterProvided(StrategyFilter filter)”。
翻过高山走不出你
心有法竹
相关分类