处理复杂的JSON与Spring MVC 3
问题描述:
我试图处理下面春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 如果我通过一个简单的对象喜欢这个工作得很好:{字段:“富”}
答
集的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。
我试着用List作为参数类型,现在我得到了415。 – DevAntoine 2012-01-16 19:29:18