java controller getMapping 使用策略模式代替if-else返回页面并携带model参数,每个页面获取不同参数放到model中,怎么去实现
时间: 2023-05-20 22:06:22 浏览: 116
可以使用策略模式来实现这个功能。首先,定义一个接口,包含一个方法来获取页面参数:
public interface PageParameterStrategy {
Map<String, Object> getPageParameters();
}
然后,实现不同的策略类来获取不同的页面参数:
public class HomePageParameterStrategy implements PageParameterStrategy {
@Override
public Map<String, Object> getPageParameters() {
Map<String, Object> parameters = new HashMap<>();
parameters.put("title", "Home Page");
parameters.put("message", "Welcome to my website!");
return parameters;
}
}
public class AboutPageParameterStrategy implements PageParameterStrategy {
@Override
public Map<String, Object> getPageParameters() {
Map<String, Object> parameters = new HashMap<>();
parameters.put("title", "About Page");
parameters.put("message", "Learn more about me!");
return parameters;
}
}
接下来,在控制器中使用策略模式来获取页面参数:
@Controller
public class MyController {
private Map<String, PageParameterStrategy> strategies;
public MyController() {
strategies = new HashMap<>();
strategies.put("home", new HomePageParameterStrategy());
strategies.put("about", new AboutPageParameterStrategy());
}
@GetMapping("/{page}")
public String getPage(@PathVariable String page, Model model) {
PageParameterStrategy strategy = strategies.get(page);
if (strategy == null) {
throw new IllegalArgumentException("Invalid page: " + page);
}
model.addAllAttributes(strategy.getPageParameters());
return page;
}
}
在这个例子中,我们使用了一个 Map 来存储不同页面的策略类,然后在控制器中根据请求的页面来获取相应的策略类,并调用其 getPageParameters 方法来获取页面参数。最后,将参数添加到 Model 中,并返回页面名称。这样,我们就成功地使用策略模式代替了 if-else 语句来返回页面并携带 model 参数。
阅读全文