2012-01-16 46 views
0

我试图处理下面春3 MVC的JSON:处理复杂的JSON与Spring MVC 3

var fields = { 
    "fields" : [ { 
     "groupId" : "mission", 
     "type" : "text", 
     "id" : "company_name", 
     "label" : "Nom de l'entreprise", 
     "size" : 0 
    }, { 
     "groupId" : "mission", 
     "type" : "text", 
     "id" : "theme", 
     "label" : "Thème", 
     "size" : 0 
    }, { 
     "groupId" : "mission", 
     "type" : "textarea", 
     "id" : "descriptive", 
     "label" : "Description", 
     "size" : 0 
    } ] 
}; 

这是我如何把它:

$.ajax({ 
    type: "POST", 
    url: "/GestaWeb/internshipConfiguration/proposal", 
    data: fields 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

通过HTTP传递的PARAMS (它的Chrome网络开发者控制台中的副本):

fields[0][groupId]:mission 
fields[0][type]:text 
fields[0][id]:company_name 
fields[0][label]:Nom de l'entreprise 
fields[0][size]:0 
fields[1][groupId]:mission 
fields[1][type]:text 
fields[1][id]:theme 
fields[1][label]:Thème 
fields[1][size]:0 
fields[2][groupId]:mission 
fields[2][type]:textarea 
fields[2][id]:descriptive 
fields[2][label]:Description 
fields[2][size]:0 

而且我的春节,3 MVC控制器:

package controller.internshipConfiguration; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.*; 
import org.springframework.web.servlet.*; 

@Controller 
@RequestMapping(value = "/internshipConfiguration") 
public class ProposalModelConfigurationController { 

    @RequestMapping(value = "/proposal", method = RequestMethod.GET) 
    public ModelAndView form(ModelMap model) { 
     System.out.println("internship config view"); 
     return new ModelAndView("internship/formModel"); 
    } 

    @RequestMapping(value="/proposal", method = RequestMethod.POST) 
    public @ResponseBody String form(@RequestParam(value="fields") String fields) { 

     System.out.println("Fields rofl: " + fields); 

     return "ok"; 
    } 

} 

当我执行阿贾克斯我有一个400 如果我通过一个简单的对象喜欢这个工作得很好:{字段:“富”}

回答

0

集的contentType到JSON在年Ajax调用:

$.ajax({ 
    type: "POST", 
    url: "/GestaWeb/internshipConfiguration/proposal", 
    data: fields, 
    contentType: "application/json" 
}).done(function(msg) { 
    alert("Data Saved: " + msg); 
}); 

你还应该创建一个java类,以匹配字段 - 杰克逊/春将自动提供类。所以年控制器想这样的事情:

@RequestMapping(value="/proposal", method = RequestMethod.POST) 
public @ResponseBody String form(@RequestBody MyPojoForFields myPojoForFields){} 

MyPojoForfields通常是域对象或DTO。

我还没有尝试过自己,但我也猜测提供List作为方法的参数也没关系。

更多阅读here

+0

我试着用List作为参数类型,现在我得到了415。 – DevAntoine 2012-01-16 19:29:18