Spring MVC中如何处理Ajax请求?

6
在Spring MVC中(我使用的是3.0.2版本),两种HTTP方法总是(或者在我的看来大多数情况下)被保留(即映射到相应的处理程序),它们是GET和POST
@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方法,因为已经映射了处理程序(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请求?(实际上,这对我来说似乎很常见)在Spring中,我是否应该(总是)使用RequestMethod.PUT?(还是说在Spring中使用哪种HTTP方法最好适用于Ajax?)

是否有一种方法可以将同一控制器中的多个方法映射到相同的HTTP方法上(显然答案应该是< strong>否)?再次问你,在Spring MVC中需要处理Ajax时,你通常采用哪种方法?希望你理解我的意思!由于我的英语水平处于初级阶段,所以我表述得很困难。

3个回答

2
我们可以在一个控制器中拥有多个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
我认为真正的问题是:
为什么希望相同的URL/方法组合在不同访问方式下表现不同呢?
如果调用的语义不同,请给它一个不同的URL。你可以直接在方法上指定URL模式,而不是在类上指定,以避免重复功能。谁在乎你是通过前端进行AJAX请求访问的呢?

谢谢!我已经使用不同的URL完成了它。现在,我需要使用Ajax从Spring控制器检索数据(通常是List <?>)。我现在不知道它,但是Spring MVC 3.0.2应该支持一些像JSON这样的机制。你知道吗?我的意思是,如果你在Spring MVC中使用过这样的东西,你有一些链接吗?如果您认为这不是原始问题,您可以拒绝我的请求。谢谢。 - Tiny

1

并不存在所谓的AJAX最佳方法

至于你应该使用哪些方法,这取决于架构风格。REST范式及其最常见的实际解释ROA(资源导向架构)对HTTP方法的语义做出了某些假设。这是一种越来越流行的方法,我认为值得阅读。充分利用REST的好处可能需要您重新思考整个应用程序设计。如果您决定以这种方式进行,请阅读有关REST、ROA和JAX-RS的信息,JAX-RS是RESTful应用程序的Java标准。它的实现可以与Spring集成。

或者,您可以坚持使用GET和POST作为最广泛支持的方法。至于Spring本身,合理的做法是提供一个单独的bean(或者可能是一组bean)来处理基于AJAX的API。如果您保持URL不同,则不会出现“冲突”的方法。


谢谢!我已经使用不同的URL完成了它。现在,我需要使用Ajax从Spring控制器检索数据(通常是List <?>)。我现在不知道它,但是Spring MVC 3.0.2应该支持一些像JSON这样的机制。你知道吗?我的意思是,如果你在Spring MVC中使用过这样的东西,你有一些链接吗?如果您认为这不是原始问题,您可以拒绝我的请求。谢谢。 - Tiny
@Tiny 这是一个使用Jackson库的示例:http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ - toniedzwiedz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接