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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值