繁体   English   中英

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

[英]How do you handle Ajax requests in Spring MVC?

在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请求时会调用上述方法。 假设使用@RequestMapping(value="admin_side/Temp")注释指定Spring控制器。


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

我认为真正的问题是:

为什么您希望相同的URL /方法组合根据其访问方式而有所不同?

谁在乎您是否通过在前端发出AJAX请求来访问它? 如果调用的语义不同,请为其指定不同的URL。 您可以直接在方法上而不是在类上指定URL模式,以避免必须从该类复制功能。

我们可以在一个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;
}

对于AJAX来说,没有最好的方法

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM