SpringMVC的引數型別轉換
阿新 • • 發佈:2018-12-10
package com.controller; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.entity.CollectionVO; import com.entity.Person; @Controller @RequestMapping("/model2/") public class HelloAnnotation3 { //SpringMVC引數型別轉換 //1.int String http://localhost:8080/SpringMVCDemo/model2/m1?name=zhangsan&age=18 @RequestMapping("m1") public String m1(int age,String name){ System.out.println(age+","+name); //如果位址列age引數為空,由於int不能接收null所以會報錯,所以一般用包裝類接收 return "index"; } //2.包裝類Integer http://localhost:8080/SpringMVCDemo/model2/m2?age=18 @RequestMapping("m2") public String m2(Integer age){ System.out.println(age); return "index"; } //3.陣列 http://localhost:8080/SpringMVCDemo/model2/m3?arr=abc&arr=aaa&arr=hello @RequestMapping("m3") public String m3(String[] arr){ System.out.println(arr.length);//3 return "index"; } //4.自定義類 http://localhost:8080/SpringMVCDemo/model2/m4?name=zhangsan&age=18 @RequestMapping("m4") public String m4(Person p){ System.out.println(p); System.out.println(p.getName()+","+p.getAge()); return "index";//注意,容器自動將此處的person提交給檢視層了 } //以上都無需加引數註解 //5.List http://localhost:8080/SpringMVCDemo/model2/m5?list=aa&list=bb @RequestMapping("m5") public String m5(@RequestParam List list){ System.out.println(list.size()); System.out.println(list);//[aa, bb] return "index"; } //6.Map http://localhost:8080/SpringMVCDemo/model2/m6?k1=aaa&k2=bbb&k3=ccc @RequestMapping("m6") public String m6(@RequestParam Map map){ System.out.println(map);//{k1=aaa, k2=bbb, k3=ccc} return "index"; } //7.自定義複合物件型別,避免如5,6那樣加註解,可以在entity中寫一個CollectionVO封裝 //http://localhost:8080/SpringMVCDemo/model2/m7?list=aa&list=bb&map%5Bk1%5D=value1 @RequestMapping("m7") public String m7(CollectionVO collectionVO){ System.out.println(collectionVO.getList().size());//2 //傳map時,本來只用寫map[k1]=value,但直接將中括號寫在位址列不解析,而應該寫 //左中括號%5B 右中括號%5D System.out.println(collectionVO.getMap());//{k1=value1} return "index"; } //8.日期引數的處理,預設傳參時是斜槓的形式 yyyy/MM/dd HH:mm:ss //http://localhost:8080/SpringMVCDemo/model2/m8?date=2018/8/8 20:30:59 @RequestMapping("m8") public String m8(Date date){ System.out.println(date);//Wed Aug 08 20:30:59 CST 2018 return "index"; } //9.自定義日期引數格式 //http://localhost:8080/SpringMVCDemo/model2/m9?date=2018-8-8 20:30:59 @RequestMapping("m9") public String m9(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") Date date){ //單純加上述註解不起作用,還要補充一下註解驅動內容,詳見springMVC-servlet.xml System.out.println(date);//Wed Aug 08 20:30:59 CST 2018 return "index"; } }
自定義日期引數格式時,在springMVC-servlet.xml中加如下配置:
<!-- 自定義日期引數格式補充註解驅動內容 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"></bean> <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
CollectionVO.java
package com.entity; import java.util.List; import java.util.Map; public class CollectionVO { private List list; private Map map; public List getList() { return list; } public void setList(List list) { this.list = list; } public Map getMap() { return map; } public void setMap(Map map) { this.map = map; } }