java controller getMapping 使用策略模式代替if-else根据手机号获取不同参数返回页面并携带model参数
时间: 2023-05-20 21:06:25 浏览: 116
spring 异步编程样例
可以使用策略模式来代替if-else,将不同的获取参数的逻辑封装在不同的策略类中,然后在controller中根据手机号选择对应的策略类来获取参数并返回页面。同时,可以将需要携带的model参数作为参数传递给策略类,让策略类进行处理并返回处理后的结果。以下是示例代码:
```
// 定义策略接口
public interface ParamStrategy {
Map<String, Object> getParams(String phone, Map<String, Object> model);
}
// 定义不同的策略类
public class ParamStrategyA implements ParamStrategy {
@Override
public Map<String, Object> getParams(String phone, Map<String, Object> model) {
// 根据手机号获取参数A
Map<String, Object> params = new HashMap<>();
params.put("paramA", "valueA");
// 处理model参数
model.put("keyA", "valueA");
return params;
}
}
public class ParamStrategyB implements ParamStrategy {
@Override
public Map<String, Object> getParams(String phone, Map<String, Object> model) {
// 根据手机号获取参数B
Map<String, Object> params = new HashMap<>();
params.put("paramB", "valueB");
// 处理model参数
model.put("keyB", "valueB");
return params;
}
}
// 在controller中使用策略模式获取参数并返回页面
@Controller
public class MyController {
private Map<String, ParamStrategy> strategyMap = new HashMap<>();
public MyController() {
// 初始化策略映射
strategyMap.put("phoneA", new ParamStrategyA());
strategyMap.put("phoneB", new ParamStrategyB());
}
@GetMapping("/getParams")
public String getParams(@RequestParam("phone") String phone, Model model) {
// 根据手机号选择对应的策略类
ParamStrategy strategy = strategyMap.get(phone);
if (strategy == null) {
throw new IllegalArgumentException("Invalid phone number");
}
// 获取参数并处理model参数
Map<String, Object> params = strategy.getParams(phone, model.asMap());
// 将参数添加到model中
model.addAllAttributes(params);
// 返回页面
return "myPage";
}
}
```
注意:以上代码仅为示例,实际使用时需要根据具体情况进行修改和优化。
阅读全文