[英]How do you handle an Ajax.Request call in a Spring MVC (3.0) app?
[英]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.