SpringBoot學習5.5-SpringMVC-自定義參數轉換器

目錄

1.參數轉換規則

2.轉換器自定義

3.參數傳遞例子

3.1.字符串轉換爲單個對象

3.2.字符串轉換爲list


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工程。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章