如何构建 spring 具有网页间共享功能的控制器
How to structure spring controllers with functionality shared between web pages
当存在共享功能的不同网页时,构建 spring 网络控制器的好方法是什么?
假设有一个 Tasks
和一个 Task
网页。我可以从两个页面开始 一项任务,我希望这样做时我会留在同一页面上。
最好的方法是什么?我是否被迫按如下方式复制逻辑:
@Controller
@RequestMapping("/tasks")
public class TasksController {
@GetMapping("/{id}/start")
public String start(@PathVariable String id) {
tasks.start(id);
return "redirect:/tasks.html";
}
}
和
@Controller
@RequestMapping("/task")
public class TaskController {
@GetMapping("/{id}/start")
public String start(@PathVariable String id) {
tasks.start(id);
return "redirect:/task.html";
}
}
ps。我对异步 JavaScipt 解决方案不感兴趣。
您可以在路径变量中使用正则表达式功能,并在另一个变量中获取页面名称。所以,我会通过以下方式解决这个问题:
@Controller
public class TaskController {
...
@GetMapping({"/{page:tasks?}/{id}/start")
public String start(@PathVariable String page, @PathVariable String id) {
tasks.start(id);
return "redirect:/" + page + ".html";
}
}
如果有更多逻辑或入口点完全不同,请将公共代码提取到服务中。
我的想法:这只是您如何设计和命名控制器的问题。理想情况下,我为每个业务域对象创建一个控制器。而不是为每个页面创建控制器。如果我们为每个业务域对象命名控制器和服务,您就可以避免这种情况。所以我只需要 TaskController 并调用相同的 URI,而不管您从任务页面、任务详细信息页面或任务报告页面调用它的位置如何。
当存在共享功能的不同网页时,构建 spring 网络控制器的好方法是什么?
假设有一个 Tasks
和一个 Task
网页。我可以从两个页面开始 一项任务,我希望这样做时我会留在同一页面上。
最好的方法是什么?我是否被迫按如下方式复制逻辑:
@Controller
@RequestMapping("/tasks")
public class TasksController {
@GetMapping("/{id}/start")
public String start(@PathVariable String id) {
tasks.start(id);
return "redirect:/tasks.html";
}
}
和
@Controller
@RequestMapping("/task")
public class TaskController {
@GetMapping("/{id}/start")
public String start(@PathVariable String id) {
tasks.start(id);
return "redirect:/task.html";
}
}
ps。我对异步 JavaScipt 解决方案不感兴趣。
您可以在路径变量中使用正则表达式功能,并在另一个变量中获取页面名称。所以,我会通过以下方式解决这个问题:
@Controller
public class TaskController {
...
@GetMapping({"/{page:tasks?}/{id}/start")
public String start(@PathVariable String page, @PathVariable String id) {
tasks.start(id);
return "redirect:/" + page + ".html";
}
}
如果有更多逻辑或入口点完全不同,请将公共代码提取到服务中。
我的想法:这只是您如何设计和命名控制器的问题。理想情况下,我为每个业务域对象创建一个控制器。而不是为每个页面创建控制器。如果我们为每个业务域对象命名控制器和服务,您就可以避免这种情况。所以我只需要 TaskController 并调用相同的 URI,而不管您从任务页面、任务详细信息页面或任务报告页面调用它的位置如何。