如何在另一个控制器中覆盖@RequestMapping?

我需要扩展现有的控制器并为其添加一些功能。但是作为项目要求,我无法接触原始控制器,问题是该控制器上有@RequestMapping注释。所以我的问题是我该如何请求/someUrl转到新控制器,而不是旧控制器。

这是一个例子,只是为了澄清我在说什么:

原始控制器:

@Controller

public class HelloWorldController {

@RequestMapping("/helloWorld")

public String helloWorld(Model model) {

model.addAttribute("message", "Hello World!");

return "helloWorld";

}

}

新控制器:

@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";

}

}

如何在不进行编辑的情况下覆盖原始映射HelloWorldController

回答:

不能覆盖作为注释的网址映射。如果使用相同的请求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";

}

}

示例:现在,如果您调用 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";

}

}

以上是 如何在另一个控制器中覆盖@RequestMapping? 的全部内容, 来源链接: utcz.com/qa/431816.html

回到顶部