java controller getMapping 使用策略模式代替if-else返回页面并携带model参数,每个页面获取不同参数放到model中,写个demo
时间: 2023-05-20 10:06:19 浏览: 45
好的,我可以为您提供一个使用策略模式代替if-else的Java Controller示例代码,如下所示:
```
@RestController
@RequestMapping("/api")
public class MyController {
private final Map<String, MyStrategy> strategyMap;
public MyController(List<MyStrategy> strategies) {
this.strategyMap = strategies.stream()
.collect(Collectors.toMap(MyStrategy::getType, Function.identity()));
}
@GetMapping("/{type}")
public ResponseEntity<MyModel> handleRequest(@PathVariable String type) {
MyStrategy strategy = strategyMap.get(type);
if (strategy == null) {
return ResponseEntity.notFound().build();
}
MyModel model = strategy.execute();
return ResponseEntity.ok(model);
}
interface MyStrategy {
String getType();
MyModel execute();
}
@Component
class StrategyA implements MyStrategy {
@Override
public String getType() {
return "A";
}
@Override
public MyModel execute() {
// execute strategy A and return MyModel
}
}
@Component
class StrategyB implements MyStrategy {
@Override
public String getType() {
return "B";
}
@Override
public MyModel execute() {
// execute strategy B and return MyModel
}
}
// add more strategies as needed
class MyModel {
// define model fields and methods
}
}
```
在这个示例中,我们使用了一个Map来存储不同类型的策略对象,每个策略对象都实现了MyStrategy接口,该接口定义了getType()和execute()方法。在控制器的handleRequest()方法中,我们根据请求的类型从Map中获取对应的策略对象,并调用其execute()方法来获取MyModel对象。最后,我们将MyModel对象封装在ResponseEntity中返回给客户端。
请注意,这只是一个示例代码,实际应用中您需要根据具体需求进行修改和优化。