【发布时间】:2013-08-01 23:34:06
【问题描述】:
我有一个支持GET 和POST 请求的资源。这里是示例资源的示例代码:
@RequestMapping(value = "/books", method = RequestMethod.GET)
public ModelAndView listBooks(@ModelAttribute("booksFilter") BooksFilter filter, two @RequestParam parameters, HttpServletRequest request)
throws ParseException {
LONG CODE
}
@RequestMapping(value = "/books", method = RequestMethod.POST)
public ModelAndView listBooksPOST(@ModelAttribute("booksFilter") BooksFilter filter, BindingResult result)
throws ParseException {
SAME LONG CODE with a minor difference
}
这两种方法中的代码实际上是相同的,除了让我们说一个变量定义。使用method = {RequestMethod.POST, RequestMethod.GET} 和一个简单的if 可以轻松组合这两种方法。我试过了,但是不行,因为这两种方法最后有不同的参数,即HttpServletRequest和BindingResult(@RequestParam不是必需的,因此在POST请求中不需要)。任何想法如何结合这两种方法?
【问题讨论】:
-
为什么不将 LONG CODE 移到单独的方法中?
-
如果这么长,你甚至应该把它分成几个短方法
-
因为我正在寻找更优雅和通用的解决方案。我不认为我有一个方法
booksLogic这是我在两个方法中唯一调用的方法。 -
@MilanMilanov:这将是最优雅的解决方案。拥有能够做好一件事并委托给其他短方法的短方法是您应该努力的目标。
-
一般情况下,对于不改变服务器的事情,你使用 GET,而对于改变服务器的事情,你使用 POST。它们是数据库中 READ 和 WRITE 的等效 http 操作。因此,将它们分开并将通用逻辑拆分为不同的方法是理想的
标签: spring spring-mvc request-mapping httpverbs