我需要扩展现有的控制器并为其添加一些功能.但是作为一个项目要求我无法触及原始控制器,问题是该控制器上有一个@RequestMapping注释.所以我的问题是如何才能请求/someUrl转到我的新控制器而不是旧控制器.
这是一个例子,只是为了澄清我在说什么:
原控制器:
@Controller
public class HelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World!");
return "helloWorld";
}
}
Run Code Online (Sandbox Code Playgroud)
新控制器:
@Controller
public class MyHelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World from my new controller");
// a lot of new logic
return "helloWorld";
}
}
Run Code Online (Sandbox Code Playgroud)
如何在不编辑的情况下覆盖原始映射HelloWorldController?
die*_*ter 15
无法覆盖作为注释的URL映射.如果两个或更多控制器配置了相同的请求URL和请求方法,您将收到错误.
你可以做的是扩展请求映射:
@Controller
public class MyHelloWorldController {
@RequestMapping("/helloWorld", params = { "type=42" })
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World from my new controller");
return "helloWorld";
}
}
Run Code Online (Sandbox Code Playgroud)
示例:现在,如果您调用yourhost/helloWorld?type = 42 MyHelloWorldController将响应请求
顺便说说.控制器不应该是动态内容提供者.你需要一个@Service实例.因此,您可以实现一次Controller并使用多个Service实现.这是Spring MVC和DI的主要思想
@Controller
public class HelloWorldController {
@Autowired
private MessageService _messageService; // -> new MessageServiceImpl1() or new MessageServiceImpl2() ...
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", messageService.getMessage());
return "helloWorld";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18827 次 |
| 最近记录: |