1. 程式人生 > >SpringMVC的引數型別轉換

SpringMVC的引數型別轉換

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;
	}
	

}