SpringMVC数据绑定全面示例(复杂对象,数组等)

http://www.xdemo.org/springmvc-data-bind/
首先贴出Controller的全部内容

这种方式支持get和post,参数可选

访问方式简单的比如http://localhost:8080/springmvc-param/request/get0?p1=xxx。

这种方式支持get,参数必须

这种方式和第一种不同的是,指定了访问访问必须为GET,而且参数是必须的,可以通过如下方式访问这个地址:http://localhost:8080/springmvc-param/request/get1?p1=xxxx。

这种方式仅支持GET,参数可选

这个方法和第二种唯一不同的就是参数是可选的,其他没有不同。

这种方式仅支持GET,参数可选

ModelAndView表示绑定了数据的视图,可以通过EL表达式去取值。

先访问http://localhost:8080/springmvc-param/request/userForm这个方法,跳转到一个页面,并向浏览器写入Cookie,第二个方法访问的时候即可通过@CookieValue方式来取到Cookie中的值。

绑定数据到一个对象上,支持get和post

一个User,一个Phone,一个User拥有多个Phone,为了演示,User中有一个List和Array的Phone的集合

Controller方法如下

HTML表单如下

一对多的时候,使用多一方的在一一方的对象中的属性名,加上数组下标,即phones[0].brand,phones[1].brand即可绑定到User的phones属性上,这种方法的局限性就是要求下标是正确的,否则会无法绑定,不是很方便,但是也有其适用场景。

下面这种方法就是比较方便了,仅支持post,但是必须要在消息转换器中配置JSON解析器

Xml代码
  1. <bean class=“org.springframework.http.converter.json.MappingJacksonHttpMessageConverter”></bean>

并注册到RequestMappingHandlerAdapter的messageConverters中。

Controller如下:

Javascript如下

该方法仅支持POST的方式,会使用到json2.js这个类库,注意设置contentType:”application/json”这个属性,否则会报415未知的类型异常。

传递简单的字符串数组,仅支持POST方式

和上面的方法类似,注意contentType:”application/json”,否则同样的415错误。

下面的方法是restful中的路径变量,支持get,post,delete等,如:xxx/1,xxx/2这种方式,经测试,这个方法的奇葩之处在于”xxx/5,4″以及”xxx/[5,4]”的效果是一样的,看代码:

可以直接将后面的路径变量,转换成相应的数组。可以在浏览器输入:http://localhost:8080/springmvc-param/request/array/5,4,3,2,1或者http://localhost:8080/springmvc-param/request/array/[5,4,3,2,1],都可以转换成数组。

如果一个表单对应多个实体类,恰好这些类中具有相同的属性,这时候SpringMVC就犯难了,我们要做的是让SpringMVC明白我们在给谁赋值。

支持post,get,put

如下,A,B,C,其中C中包含了A和B两个成员变量

Controller如下

HTML如下:

通过object.property即可指定给谁赋值。

另外一个是关于Session取值的

代码如下

在Controller上加上注解@SessionAttributes(value=”user”),再使用ModelMap的put方法(非addAttribute方法),然后在getUser方法中,使用@ModelAttribute(“user”)即可取得session中的user对象

Maven依赖:

Spring配置