如何在另一个控制器中覆盖@RequestMapping?
我需要扩展现有的控制器并为其添加一些功能。但是作为项目要求,我无法接触原始控制器,问题是该控制器上有@RequestMapping
注释。所以我的问题是我该如何请求/someUrl
转到新控制器,而不是旧控制器。
这是一个例子,只是为了澄清我在说什么:
原始控制器:
@Controllerpublic class HelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World!");
return "helloWorld";
}
}
新控制器:
@Controllerpublic 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";
}
}
如何在不进行编辑的情况下覆盖原始映射HelloWorldController
?
回答:
不能覆盖作为注释的网址映射。如果使用相同的请求url和请求方法配置了两个或更多控制器,则会出现错误。
您可以做的是扩展请求映射:
@Controllerpublic class MyHelloWorldController {
@RequestMapping("/helloWorld", params = { "type=42" })
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World from my new controller");
return "helloWorld";
}
}
示例:现在,如果您调用 MyHelloWorldController
将响应请求
顺便说说。控制器不应为动态内容提供商。您需要一个@Service
实例。因此,您可以一次实现Controller并使用多个Service实现。这是Spring
MVC和DI的主要思想
@Controllerpublic 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";
}
}
以上是 如何在另一个控制器中覆盖@RequestMapping? 的全部内容, 来源链接: utcz.com/qa/431816.html