如何使用网页之间共享的功能构建弹簧控制器

时间:2017-11-01 16:53:54

标签: java spring spring-mvc spring-boot spring-web

当存在共享功能的不同网页时,构建弹簧网络控制器的好方法是什么?

假设有一个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解决方案不感兴趣。

2 个答案:

答案 0 :(得分:1)

您可以在路径变量中使用Regex功能,并在另一个变量中获取页面名称。所以,我会通过以下方式解决这个问题:

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

如果有更多逻辑或入口点完全不同,则将公共代码提取到服务中。

答案 1 :(得分:0)

我的想法:这只是你的设计和命名控制器的问题。理想情况下,我为每个业务域对象创建一个控制器。而不是为每个页面创建控制器。如果我们为每个业务域对象命名Controller和Services,则可以避免这种情况。所以我只需要TaskController并调用相同的URI,无论你从Task页面,TaskDetail页面还是TaskReport页面调用它。