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

 

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