java - Spring MVC Controller 如何在ajax请求上绑定(bind)到多个模型

标签 java spring spring-mvc

对我的 Controller 操作的发布请求来自 ajax,如下所示:

$.post("myurl.htm", { view: $("#selView").val(), 
    val1: "value1", val2: "value2"
});

我有两个模型 FooBar

public class Foo {
   public String val1;
   //getter/setters
}

public class Bar {
   public String val2;
   //getters/setters
}

现在,我的 Controller 操作如下所示:

@RequestMapping(value="/myurl.htm", method=RequestMethod.POST)
public ModelAndView doSomething (
    @RequestParam(value="view", required=true) String view, 
    @RequestParam(value="val1", required=false) String val1, 
    @RequestParam(value="val2", required=false) String val2) {
  Foo foo = new Foo();
  Bar bar = new Bar();
  if (view.equalsIgnoreCase("something"))  
     foo.setVal1(val1);
  else if (view.equalsIgnoreCase("somethingelse"))  
     foo.setVal2(val2);

  fooService.doSomeStuffWithDb(foo);
  barService.doSomeStuffWithDb(bar);

}

问题

  1. 尽管如此,以上所有内容都有效,我认为应该有更好的方法来做到这一点......?如果我在发布请求中发布了 10 个参数,我的 Controller 操作中是否也会有 10 个参数?这不会很好地扩展。

  2. 那么,有没有一种方法可以让 Spring 自动将参数绑定(bind)到模型上相关的 getter/setter 上?

最佳答案

spring可以将请求参数作为Map注入(inject):

@RequestMapping(value="/foo", method=RequestMethod.POST)
public ModelAndView doSomething (@RequestParam Model<String, String> params) {
    params.get("val1");
    params.get("val2");
    // ...
}

使用未修改的 JavaScript。这不像 @ModelAttribute 版本那么优雅,但可以通过很多参数很好地扩展。

关于java - Spring MVC Controller 如何在ajax请求上绑定(bind)到多个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13439976/

相关文章:

spring - 使用 Spring Security 内存中身份验证进行内部化

Spring Security 5 身份验证总是返回 302

java - 如何编写正则匹配表达式。 -Java

java - java中除了com和org之外还有其他的东西吗?

java - 如何指定 JRE 来运行可执行 jar

java - 使用 @Value 会产生 UnsatisfiedDependencyException

java - Vaadin 无法将项目添加到网格

java - 如何使用 java spring 制作 encodeURI/decodeURI?

java - Spring Rest ErrorHandling @ControllerAdvice/@Valid

java - 使用 Spring MVC 将动态表保存到数据库