在form表单中向后台转过来的参数,在springmvc框架中会将他们自动的转换为我们设置的参数类型(前提是参数和name值对的上);
但是有些时候我们需要一个特定的转换类型,比如我们需要一个类型bean。这时候就需要我们自己自定义。
以下我以字符串转换为集合。作为本次实验的模型
在标签中如果设置多个标签用空格隔开,而我们就需要把他转换为集合
<form action="/goods" method="post">
商品名:<input type="text" name="goodsName"><br>
标签:<input type="text" name="tags" placeholder="多个标签用空格隔开"/>
<input type="submit" value="保存">
</form>
在写一个接口
@PostMapping("/goods")
public String query(String goodsName, Tags tags){
System.out.println(tags);
return "index";
}
Tags 类
List<String> list;
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
自定义转换类型类
import com.my.bean.Tags;
import org.springframework.core.convert.converter.Converter;
import java.util.Arrays;
//只名 字符串转换为Tags类
public class TagsConvert implements Converter<String, Tags> {
@Override
public Tags convert(String source) {
if (source.isBlank()){
return null;
}
//使用正则表达式 找到空格
String[] split = source.split("\s+");
Tags tags = new Tags();
tags.setList(Arrays.stream(split).toList());
return tags;
}
}
最后一步就是配置自定义转换类,当接口接收参数时会判断类型,如果找不到就会去找我们所定义的转换类
有两种方法第一种
<!--注册类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.my.convert.TagsConvert"/>
</set>
</property>
</bean>
<!--开启springMVC框架注解的支持,增加类行转换器,使其生效-->
<mvc:annotation-driven conversion-service="conversionService"/>
第二种
<bean id="factoryBean" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.my.convert.TagsConvert"/>
</set>
</property>
</bean>
<!--开启springMVC框架注解的支持,增加类行转换器,使其生效-->
<mvc:annotation-driven conversion-service="factoryBean"/>
最后再看一眼我调试的截图吧。