你如何处理Spring MVC中的Ajax请求?

时间:2012-08-05 18:11:40

标签: java ajax spring jsp spring-mvc

在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时,您使用哪种方法?希望你遵循我的意思!由于我的英语处于最初阶段,因此我很难表达。

3 个答案:

答案 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不同,则不会有“冲突”方法。