SpringMVC参数传递:@RequestBody @ResponseBody 前台传递数组

来源:互联网 发布:天思软件集团 编辑:程序博客网 时间:2024/05/01 09:29

          今天搞了整天,目的是怎样,将前台Ajax传递的数组对象,在控制器中被接收,之前都是传递的对象,没有任何问题,现在是数组。可能出现各种位置的问题。

其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List
     首先确保Jackson包是正确的版本,如果是非正确的版本可能会出现问题。
         我的Jackson版本如下:

传递数组

Spring-MVC.xml

 <bean               class= "org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >               <property name= "messageConverters">                      <list>                            <bean                                   class= "org.springframework.http.converter.StringHttpMessageConverter" >                                   <property name= "supportedMediaTypes">                                          <list>                                                 <value> text/plain;charset=UTF-8 </value>                                                 <value> application/json; charset=UTF-8</value >                                          </list>                                   </property>                            </bean>                            <bean                                   class= "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />                      </list>               </property>        </bean>

js端

ajax请求: 目前好像只能要$.ajax 如有采用$.post,估计要控制contentType = "application/json",不然后报HTTP state错误;
     $.ajax({                  type : 'POST',                  url : 'simulator/pog/add',                  contentType : "application/json" , //必须指定contentType                  data : JSON.stringify(voArr), //voArr是数组对象,必须转成数组字符串                  success : function(data) {                                   }         });

SpringMVC控制器端:

  @RequestMapping("/add" )        @ResponseBody        public String addPogInfo(@RequestBody SMPogDetail[] list) { //这个地方是对象数组,或者是List<SMPogDetail>               return "success" ;       }

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

传递普通对象(非数组)

$.ajax({                             type : 'POST',                             url : "simulator/pog/getAllPogList",                             data : param,     //参数是json对象,而不是字符串,不需要指定contentType                             success : function(data) {                                    data = JSON.parse(data);                                    if (true == data.success) {                                           pog.addRow(data.rows);                                    }                             }                       });

SpringMVC控制器端:

@RequestMapping("/add" )        @ResponseBody        public String addPogInfo(SMPogDetail detail) {                return "success" ;       }




1 0
原创粉丝点击