當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
SpringMVC—对Ajax的处理(含 JSON 类型)(2)
生活随笔
收集整理的這篇文章主要介紹了
SpringMVC—对Ajax的处理(含 JSON 类型)(2)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這里編寫了一個(gè)通用的類型轉(zhuǎn)換器:用來(lái)轉(zhuǎn)換形如: firstName=jack&lastName=lily&gender=1&foods=Steak&foods=Pizza"e=Enter+your+favorite+quote!&education=Jr.High&tOfD=Day 到 Student 對(duì)象。/*** @author solverpeng* @create 2016-08-22-17:37 */public final class InjectUtil<T> { private static final Logger LOGGER = LoggerFactory.getLogger(InjectUtil.class); public static <T> T converter2Obj(String source, Class<T> tClass) {T t = null; try {t = tClass.newInstance();Map<String, Object> params = new HashMap<String, Object>(); if(source != null && source.length() > 0) {String[] fields = source.split("&"); for(String field : fields) {String[] fieldKeyValue = field.split("\\=");String fieldKey = fieldKeyValue[0];String fieldValue = fieldKeyValue[1]; if (params.containsKey(fieldKey)) {Object keyValueRetrieved = params.get(fieldKey); if (keyValueRetrieved instanceof String) {ArrayList<String> values = new ArrayList<>();values.add(keyValueRetrieved.toString());values.add(fieldValue);params.put(fieldKey, values);} else {((ArrayList<String>) keyValueRetrieved).add(fieldValue);}} else {params.put(fieldKey, fieldValue);}}}BeanUtils.populate(t, params);} catch(InstantiationException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();LOGGER.error("String convert to Bean failure!", e);} return t;}}不要忘記在 SpringMVC 中添加自定義的轉(zhuǎn)換器。e3:也可以在 handler 方法中來(lái)調(diào)用上面我編寫的通用的類型轉(zhuǎn)換器來(lái)完成解析。@RequestMapping("/testStudent")public String testStudent(@RequestParam("student") String studentStr, String amount) {System.out.println("studentStr:" + studentStr);System.out.println("amount:" + amount); return "success";
}
說(shuō)明:對(duì)于復(fù)雜數(shù)據(jù)來(lái)說(shuō),我們借助不了 SpringMVC,只能借助于第三方,或是自己來(lái)編寫解析器來(lái)解析。★多表單一次提交表單數(shù)據(jù):<form action="" method="post" id="form2">First Name:<input type="text" name="firstName" maxlength="12" size="12"/> <br/>Last Name:<input type="text" name="lastName" maxlength="36" size="12"/> <br/>Gender:<br/>Male:<input type="radio" name="gender" value="1"/><br/>Female:<input type="radio" name="gender" value="0"/><br/><%–Favorite Food:<br/>Steak:<input type="checkbox" name="foods" value="Steak"/><br/>Pizza:<input type="checkbox" name="foods" value="Pizza"/><br/>Chicken:<input type="checkbox" name="foods" value="Chicken"/><br/>–%><textarea wrap="physical" cols="20" name="quote" rows="5">Enter your favorite quote!</textarea><br/>Select a Level of Education:<br/><select name="education"><option value="Jr.High">Jr.High</option><option value="HighSchool">HighSchool</option><option value="College">College</option></select><br/>Select your favorite time of day:<br/><select size="3" name="tOfD"><option value="Morning">Morning</option><option value="Day">Day</option><option value="Night">Night</option></select><p><input type="submit"/></p></form><form action="" method="post" id="form1">First Name:<input type="text" name="firstName" maxlength="12" size="12"/> <br/>Last Name:<input type="text" name="lastName" maxlength="36" size="12"/> <br/>Gender:<br/>Male:<input type="radio" name="gender" value="1"/><br/>Female:<input type="radio" name="gender" value="0"/><br/><%– Favorite Food:<br/>Steak:<input type="checkbox" name="foods" value="Steak"/><br/>Pizza:<input type="checkbox" name="foods" value="Pizza"/><br/>Chicken:<input type="checkbox" name="foods" value="Chicken"/><br/>–%><textarea wrap="physical" cols="20" name="quote" rows="5">Enter your favorite quote!</textarea><br/>Select a Level of Education:<br/><select name="education"><option value="Jr.High">Jr.High</option><option value="HighSchool">HighSchool</option><option value="College">College</option></select><br/>Select your favorite time of day:<br/><select size="3" name="tOfD"><option value="Morning">Morning</option><option value="Day">Day</option><option value="Night">Night</option></select></form>
e1:同時(shí)需要定義一個(gè) Students 類:public class Students { private List<Student> students; public List<Student> getStudents() { return students;} public void setStudents(List<Student> students) { this.students = students;}
}請(qǐng)求:$('form').submit(function() {$.ajax({url : "testStudent",data : JSON.stringify({ "students": [$('#form1').serializeObject(),$('#form2').serializeObject()]}),contentType:"application/json;charset=utf-8",type : "post",success : function (result) {console.log(result);}}); return false;
});handler 方法:@RequestMapping("/testStudent")public String testStudent(@RequestBody Students students) { for(Student student : students.getStudents()) {System.out.println("student:" + student);} return "success";
}可以正常打印。 e2:不額外增加類,即不定義 Students請(qǐng)求:$('form').submit(function() {$.ajax({url : "testStudent",data : JSON.stringify([$('#form1').serializeObject(),$('#form2').serializeObject()]),contentType:"application/json;charset=utf-8",type : "post",success : function (result) {console.log(result);}}); return false;
});handler 方法:e21:通過(guò)數(shù)組來(lái)接收@RequestMapping("/testStudent")public String testStudent(@RequestBody Student[] students) { for(Student student : students) {System.out.println("student: " + student);} return "success";
}e22:通過(guò) List 來(lái)接收@RequestMapping("/testStudent")public String testStudent(@RequestBody List<Student> students) { for(Student student : students) {System.out.println("student: " + student);} return "success";
}★一個(gè)表單多個(gè)對(duì)象表單對(duì)象如:e1:<form action="" method="post" id="form">First Name:<input type="text" name="firstName" maxlength="12" size="12"/> <br/>Last Name:<input type="text" name="lastName" maxlength="36" size="12"/> <br/>Gender:<br/>Male:<input type="radio" name="gender" value="1"/><br/>Female:<input type="radio" name="gender" value="0"/><br/><%–Favorite Food:<br/>Steak:<input type="checkbox" name="foods" value="Steak"/><br/>Pizza:<input type="checkbox" name="foods" value="Pizza"/><br/>Chicken:<input type="checkbox" name="foods" value="Chicken"/><br/>–%><textarea wrap="physical" cols="20" name="quote" rows="5">Enter your favorite quote!</textarea><br/>Select a Level of Education:<br/><select name="education"><option value="Jr.High">Jr.High</option><option value="HighSchool">HighSchool</option><option value="College">College</option></select><br/>Select your favorite time of day:<br/><select size="3" name="tOfD"><option value="Morning">Morning</option><option value="Day">Day</option><option value="Night">Night</option></select>First Name:<input type="text" name="firstName" maxlength="12" size="12"/> <br/>Last Name:<input type="text" name="lastName" maxlength="36" size="12"/> <br/>Gender:<br/>Male:<input type="radio" name="gender" value="1"/><br/>Female:<input type="radio" name="gender" value="0"/><br/><%– Favorite Food:<br/>Steak:<input type="checkbox" name="foods" value="Steak"/><br/>Pizza:<input type="checkbox" name="foods" value="Pizza"/><br/>Chicken:<input type="checkbox" name="foods" value="Chicken"/><br/>–%><textarea wrap="physical" cols="20" name="quote" rows="5">Enter your favorite quote!</textarea><br/>Select a Level of Education:<br/><select name="education"><option value="Jr.High">Jr.High</option><option value="HighSchool">HighSchool</option><option value="College">College</option></select><br/>Select your favorite time of day:<br/><select size="3" name="tOfD"><option value="Morning">Morning</option><option value="Day">Day</option><option value="Night">Night</option></select><p><input type="submit"/></p></form>e2:<form action="" method="post">First Name:<input type="text" name="firstName[0]" maxlength="12" size="12"/> <br/>Last Name:<input type="text" name="lastName[0]" maxlength="36" size="12"/> <br/>Gender:<br/>Male:<input type="radio" name="gender[0]" value="1"/><br/>Female:<input type="radio" name="gender[0]" value="0"/><br/>Favorite Food:<br/>Steak:<input type="checkbox" name="foods[0]" value="Steak"/><br/>Pizza:<input type="checkbox" name="foods[0]" value="Pizza"/><br/>Chicken:<input type="checkbox" name="foods[0]" value="Chicken"/><br/><textarea wrap="physical" cols="20" name="quote[0]" rows="5">Enter your favorite quote!</textarea><br/>Select a Level of Education:<br/><select name="education[0]"><option value="Jr.High">Jr.High</option><option value="HighSchool">HighSchool</option><option value="College">College</option></select><br/>Select your favorite time of day:<br/><select size="3" name="tOfD[0]"><option value="Morning">Morning</option><option value="Day">Day</option><option value="Night">Night</option></select>First Name:<input type="text" name="firstName[1]" maxlength="12" size="12"/> <br/>Last Name:<input type="text" name="lastName[1]" maxlength="36" size="12"/> <br/>Gender:<br/>Male:<input type="radio" name="gender[1]" value="1"/><br/>Female:<input type="radio" name="gender[1]" value="0"/><br/>Favorite Food:<br/>Steak:<input type="checkbox" name="foods[1]" value="Steak"/><br/>Pizza:<input type="checkbox" name="foods[1]" value="Pizza"/><br/>Chicken:<input type="checkbox" name="foods[1]" value="Chicken"/><br/><textarea wrap="physical" cols="20" name="quote[1]" rows="5">Enter your favorite quote!</textarea><br/>Select a Level of Education:<br/><select name="education[1]"><option value="Jr.High">Jr.High</option><option value="HighSchool">HighSchool</option><option value="College">College</option></select><br/>Select your favorite time of day:<br/><select size="3" name="tOfD[1]"><option value="Morning">Morning</option><option value="Day">Day</option><option value="Night">Night</option></select><p><input type="submit"/></p></form>來(lái)看經(jīng)過(guò)處理后的數(shù)據(jù):e1:(1)JSON.stringify($('form').serializeObject()):{"firstName":["jack","tom"],"lastName":["aa","lily"],"foods":["Steak","Pizza","Steak"],"quote":["Enter your favorite quote!","Enter your favorite quote!"],"education":["Jr.High","Jr.High"],"tOfD":["Day","Day"],"gender":"1"}(2)$('form').serialize():firstName=jack&lastName=aa&foods=Steak&foods=Pizza"e=Enter+your+favorite+quote!&education=Jr.High&tOfD=Day&firstName=tom&lastName=lily&gender=1&foods=Steak"e=Enter+your+favorite+quote!&education=Jr.High&tOfD=Day說(shuō)明:第一種是無(wú)法處理的,沒辦法分清數(shù)組中的值是屬于哪個(gè)對(duì)象的。第二種方式可以處理,但是需要編寫自定義的類型轉(zhuǎn)換器,這里不進(jìn)行說(shuō)明。有興趣的童鞋,請(qǐng)自行探索。e2:(1)JSON.stringify($('form').serializeObject()):{"firstName[0]":"aa","lastName[0]":"bb","gender[0]":"1","foods[0]":"Pizza","quote[0]":"Enter your favorite quote!","education[0]":"Jr.High","tOfD[0]":"Day","firstName[1]":"ds","lastName[1]":"cc","gender[1]":"1","foods[1]":["Steak","Pizza"],"quote[1]":"Enter your favorite quote!","education[1]":"Jr.High","tOfD[1]":"Day"}(2)$('form').serialize():firstName%5B0%5D=aa&lastName%5B0%5D=bb&gender%5B0%5D=1&foods%5B0%5D=Pizza"e%5B0%5D=Enter+your+favorite+quote!&education%5B0%5D=Jr.High&tOfD%5B0%5D=Day&firstName%5B1%5D=ds&lastName%5B1%5D=cc&gender%5B1%5D=1&foods%5B1%5D=Steak&foods%5B1%5D=Pizza"e%5B1%5D=Enter+your+favorite+quote!&education%5B1%5D=Jr.High&tOfD%5B1%5D=Day說(shuō)明:第一種看著有規(guī)律可循,貌似可以進(jìn)行解析,但是不是一個(gè)標(biāo)準(zhǔn)的 JSON 格式的數(shù)據(jù)。第二種甚至都出現(xiàn)了亂碼,沒有想到解析的辦法。來(lái)看看第一種,同樣這里提供一種思路,因?yàn)閷?shí)現(xiàn)起來(lái)比較費(fèi)勁。思路:使用正則like this :Gson gson = new Gson();
String jsonInString = "{\"student[0].firstName\": \"asdf\",\"student[0].lastName\": \"sfd\",\"student[0].gender\": \"1\",\"student[0].foods\":[\"Steak\",\"Pizza\"],\"student[0].quote\": \"Enter your favorite quote!\",\"student[0].education\": \"Jr.High\",\"student[0].tOfD\": \"Day\",\"student[1].firstName\": \"sf\",\"student[1].lastName\": \"sdf\",\"student[1].gender\": \"1\",\"student[1].foods\": [\"Pizza\",\"Chicken\"],\"student[1].quote\": \"Enter your favorite quote!\",\"student[1].education\": \"Jr.High\",\"student[1].tOfD\": \"Night\"}";
String jsonWithoutArrayIndices = jsonInString.replaceAll("\\[\\d\\]", "").replaceAll("student.","");
String jsonAsCollection = "[" + jsonWithoutArrayIndices + "]";
String jsonAsValidCollection = jsonAsCollection.replaceAll(",\"student.firstName\"","},{\"student.firstName\"");
System.out.println(jsonAsValidCollection);
Student[] students = gson.fromJson(jsonAsValidCollection, Student[].class);
System.out.println("-----------------------------------------------");
System.out.println(students[0]);
System.out.println("-----------------------------------------------");
轉(zhuǎn)載于:https://www.cnblogs.com/ipetergo/p/6690537.html
總結(jié)
以上是生活随笔為你收集整理的SpringMVC—对Ajax的处理(含 JSON 类型)(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【MFC】0xC0000005: 读取位
- 下一篇: 调整ESX的VMFS磁盘格式的块大小,让