Json使用嵌套的List <pojo> property </pojo>序列化为java pojo

时间:2013-11-06 18:02:34

标签: java jquery json spring-mvc

下面是我的代码尝试发布一个Json序列化对象(带有其他pojos列表的java pojo)以及对Spring MVC控制器的JQuery Ajax调用。

从服务器获取错误请求错误。

当从Json对象中删除modalForm数据时,MainPojo数据在服务器端正确接收。

Html代码

   Fisrt form
   ------------- 
    <form id="mainForm">
           .....
    </form>

    Form in the modal
    -----------------
    <form  id="modelform" ..>
         <div id="row"> 
    <input type="text" id="subject" />
    <input type="text" id="max" />
    <input type="text" id="min" />
      </div>
     <div id="row"> 
    <input type="text" id="subject" />
    <input type="text" id="max" />
    <input type="text" id="min" />
     </div>
         ............. 
    </form>}

Jquery

          var mainObject = $('#mainForm').serializeObject();

          var modelObject = $('#modelform').serializeObject();

          mainObject.marks = modelObject;

Json(预期)

          {
            "name": "Some Name",
             "age": "10",
             "marks": [
               {
                 "subject": "maths",
                 "max": "20",
             "min":"12"
                },
               {
                 "subject": "english",
                 "max": "20",
             "min":"12",
                }
              ]
          }

Json(带上述代码的实际输出)

           {
             "name": "Some Name",
              "age": "10",
              "marks": [
                        {
                         "subject": "maths",
                         "subject": "english"
                         },
                         {
                          "max": "20",
                       "max":"20",
                          },
                      {
                       "min": "12",
                       "min":"12"
                       }
                          ]
               }

                 //Ajax call
                 $.ajax({
                       url: '/save',
                   type: 'POST',
                   contentType: 'application/json',
                   mimeType: 'application/json',
                   data : JSON.stringify(mainObject),
                   dataType: 'json',
                   success: function(data) {
                      alert(data.msg);
                   },
                   error:function (xhr, ajaxOptions, thrownError) {
                      alert('Technical error occured');
                   }
           });

Java Pojo的

          public class MainPojo {

            private String name;
            private String age;            
                private Lists<marks>
                ..................
          }

          public class ModelPojo {

            private String subject;
            private String maxMarks;
            private String minMarks;

                .....................
            }

控制器方法

@RequestMapping(value = "save", headers = "Accept=application/json",
                method = RequestMethod.POST)
public @ResponseBody String save(@RequestBody final  MainPojo  mainPojo) {

} 

请帮我确定问题。

谢谢。

2 个答案:

答案 0 :(得分:2)

像这样修改HTML文本

     <form id="mainForm">
    <input name="name" type="text" value="Some Name">
    <input name="age" type="text" value="20">
     </form>
     <form  class="modelform">

    <input type="text" value="subject" name="subject"/>
    <input type="text" value="max" name="max"/>
    <input type="text" value="min" name="min"/>
      </form>
     <form  class="modelform">
    <input type="text" value="subject" name="subject" />
    <input type="text" value="max" name="max"/>
    <input type="text" value="min"  name="min"/>
   </form>

然后编写javascript代码以分配对象值

<script>
    var mainObject = $('#mainForm').serializeObject();
    var modelObject = [];
     $('.modelform').each(function(o){
        modelObject.push($(this).serializeObject());
    })
    mainObject.marks = modelObject;
</script>

答案 1 :(得分:1)

我有

 @RequestMapping(value = "/save", method = RequestMethod.POST)
public @ResponseBody
MyEvent saveOrganization(@RequestBody Organization organization) {

    return new MyEvent('save',organization);
}

你的mvc-servlets.xml

 <context:component-scan base-package="com.jrey.project.controllers" />
<context:annotation-config></context:annotation-config>

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean
            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">

        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

我的jquery帖子

  $.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
    if (o[this.name] !== undefined) {
        if (!o[this.name].push) {
            o[this.name] = [ o[this.name] ];
        }
        o[this.name].push(this.value || '');
    } else {
        o[this.name] = this.value || '';
    }
});
return o;

};

  <script>
$(document)
        .ready(
                function() {
                    $('.submit', '#form')
                            .click(
                                    function() {
                                        var data = JSON
                                                .stringify($('#form')
                                                        .serializeObject());
                                        console.log(data);

                                        $
                                                .ajax({
                                                    type : "POST",
                                                    url : '${pageContext.request.contextPath}/controller/organization',
                                                    data : data,
                                                    dataType : 'json',
                                                    contentType : 'application/json;charset=UTF-8',
                                                    success : function(data) {
                                                        $(
                                                                '<div>'
                                                                        + data.message
                                                                        + '</div>')
                                                                .dialog(
                                                                        {
                                                                            title : 'Organizacion',
                                                                            modal : true,
                                                                            buttons : {
                                                                                'Aceptar' : function() {
                                                                                    document.location.href = data.location;
                                                                                }
                                                                            }
                                                                        }

                                                                );
                                                    },
                                                });
                                    });
                });