目錄
1.參數轉換規則
SpringMVC能夠將請求中的參數轉換爲控制器方法中的參數,是因爲提供的處理器會以一套規則來實現參數(請求體)的轉換。這些規則(轉換器)被註冊到WevDataBinder中。如果我們自定義自定義了一個轉換規則,註冊到註冊機中也可以使用,從而來轉換一些特殊的參數。
2.轉換器自定義
語法和原理:
- 轉換器需要實現Converter<S, D>接口,S代表源參數類型,D代表目標參數類型。
- 系統啓動成功註冊該轉換器後,在參數傳遞到後臺,mvc遍歷各個轉換器尋找對應的轉換器,如果S符合前臺參數類型,且D是控制器參數類型,則用該轉換器來轉換參數。
- 如果有多個相同類型的參數轉換器,在遍歷時尋找到合適的就立馬使用,另一個轉換器不會被使用。
例如將String類型的參數轉換爲User類型,String中各屬性用“-”隔開。
自定義轉換器:
package com.zyf.springMVC.mvcparam;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
* 自定義mvc參數轉換器
* String類型轉換爲User類型
*/
@Component
public class String2UserConverter implements Converter<String, User> {
@Override
public User convert(String source) {
if (StringUtils.isEmpty(source)) {
return null;
}
String[] userArr = source.split("-");
if (userArr.length == 0) {
return null;
}
User user = new User();
user.setId(Integer.parseInt(userArr[0]));
user.setName(userArr[1]);
user.setSex(Integer.parseInt(userArr[2]));
user.setNote(userArr[3]);
return user;
}
}
3.參數傳遞例子
3.1.字符串轉換爲單個對象
@Controller
@RequestMapping(path = { "/mvcparam" })
public class MvcParamController {
/**自定義轉換(1對1)*/
@RequestMapping(value = { "/mp8" })
public ModelAndView mp8(User user) {
ModelAndView mv = new ModelAndView();
mv.addObject("user", user);
mv.setViewName("mvcparam/mp8");
return mv;
}
}
http://localhost:8080/mvcparam/mp8?user=3-wangwu-1-數據轉換器測試
測試:
字符串轉換爲user:
控制器方法獲取到參數:
3.2.字符串轉換爲list<User>
字符串參數可以包號多個實體數據,每個用逗號隔開(有逗號springmvc就認爲其是數據參數),mvc將其轉換爲數組,然後根據3.1的轉換器轉換爲list<User>。
語法:url中的參數名和控制器方法的參數名要相同。
url中的字符串參數被自定義轉換器轉換爲User類型。
@RequestMapping(value = { "/mp9" })
public ModelAndView mp9(List<User> userList) {
ModelAndView mv = new ModelAndView();
mv.addObject("userList", userList);
mv.setViewName("mvcparam/mp9");
return mv;
}
URL:http://localhost:8080/mvcparam/mp9?userList=3-wangwu-1-數據轉換器測試,4-zhaoliu-2-數據list轉換器測試
測試:
github:https://github.com/zhangyangfei/SpringBootLearn.git中的springMVC工程。