在Spring MVC中(我正在使用3.0.2),两个HTTP方法始终(或者在我看来)主要是保留(即使用适当的处理程序映射){{{ 3}}例如
@RequestMapping(method=RequestMethod.GET)
public String showForm(Map model)
{
//Usually retrieve data from the database when the page is loaded.
return "admin_side/Temp";
}
在发出GET请求时调用上述方法。
@RequestMapping(method=RequestMethod.POST)
public String onSubmit(@ModelAttribute("tempBean") @Valid TempBean tempBean, BindingResult error, Map model, HttpServletRequest request, HttpServletResponse response)
{
//Perform some basic operations with the database like insert, update or delete when the form is submitted (by clicking a submit button or so).
return "admin_side/Temp";
}
发出POST请求时会调用上述方法。假设Spring控制器被指定为@RequestMapping(value="admin_side/Temp")
注释。
现在,如果我需要使用Ajax并且需要执行与前面方法不同的功能,会发生什么?我既不能使用GET方法也不能使用POST方法处理另一个方法,因为已经映射了处理程序(HTTP方法,GET和POST都分别用于处理showForm()
和onSubmit()
方法)。
为了演示,我使用了method=RequestMethod.PUT
方法与Ajax ,例如
@RequestMapping(method=RequestMethod.PUT)
public @ResponseBody String getStateList(@ModelAttribute("tempBean") @Valid TempBean tempBean, BindingResult error, HttpServletRequest request, HttpServletResponse response)
{
return "Message";
}
它按预期工作但我觉得应该不是最好的解决方案。你如何处理Spring MVC中的Ajax请求,如果你有这样的场景(实际上,对我来说似乎很常见)?我(总是)应该使用RequestMethod.PUT
吗? (或者Spring中最好的Ajax HTTP方法是什么?)
有没有办法在同一控制器中使用相同的HTTP方法映射多个方法(显而易见的答案应该是否)?再次,当您需要在Spring MVC中使用Ajax时,您使用哪种方法?希望你遵循我的意思!由于我的英语处于最初阶段,因此我很难表达。
答案 0 :(得分:2)
我认为真正的问题是:
为什么您希望相同的网址/方法组合根据其访问方式采取不同的行动?
谁在乎你是否通过在前端发出AJAX请求来访问它?如果调用的语义不同,请为其指定不同的URL。您可以直接在方法上而不是在类上指定URL模式,以避免必须从该类复制功能。
答案 1 :(得分:2)
我们可以在一个Controller中使用多个GET和POST方法,我们需要为此目的使用value属性
前:
@RequestMapping(method=RequestMethod.GET, value = "/showForm")
public ModelAndView showForm(){
}
@RequestMapping(method=RequestMethod.GET, value = "/processAjaxRequest")
public ModelAndView processAjax(){
ModelAndView modelAndView = new ModelAndView("page.jsp");
modelAndView.addObject("ajax_response", ajax_response);
return modelAndView;
}
答案 2 :(得分:1)
没有 AJAX 的最佳方法。
至于你应该使用什么方法,它取决于架构风格。 REST范例及其最常见的实用解释,ROA(资源导向架构)对HTTP方法的语义做出了某些假设。这是一种越来越受欢迎的方法,我认为值得一读。但是,充分利用REST的好处可能需要您重新考虑整个应用程序设计。如果您决定这样做,请阅读REST,ROA和JAX-RS,这是RESTful应用程序的Java标准。它的实现可以与Spring集成。
或者,您可以坚持使用GET和POST作为最广泛支持的方法。至于Spring本身,合理的方法是提供一个单独的bean(或者可能是一组bean)来处理基于AJAX的API。如果您保持URL不同,则不会有“冲突”方法。