一、springmvc集成数据转换框架:
1、自定义类型转换器,可根据需求实现Converter、GenericConverter、ConverterFactory之一皆可。如String-->PhoneNumber:
/**
*自定义Sring转PhoneNumberModel的类型转换器
*/
public class StringToPhoneNumberConverter implements Converter<String, PhoneNumberModel> {
Pattern pattern = Pattern.compile("^(\\d{3,4})-(\\d{7,8})$");
@Override
public PhoneNumberModel convert(String source) {
if(!StringUtils.hasLength(source)) {
//①如果source为空 返回null
return null;
}
Matcher matcher = pattern.matcher(source);
if(matcher.matches()) {
//②如果匹配 进行转换
PhoneNumberModel phoneNumber = new PhoneNumberModel();
phoneNumber.setAreaCode(matcher.group(1));
phoneNumber.setPhoneNumber(matcher.group(2));
return phoneNumber;
} else {
//③如果不匹配 转换失败
throw new IllegalArgumentException(String.format("类型转换失败,需要格式[010-12345678],但格式是[%s]", source));
}
}
}
/*
* 座机电话数据模型
*/
public class PhoneNumberModel {
private String areaCode; //区号
private String phoneNumber; //电话号码
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
2、在springmvc-servlet.xml中注册自定义的转换器:
<!--注册自定义转换器--> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.mycompany.myapp.converter.StringToPhoneNumberConverter"/> </set> </property> </bean> <!--注册conversionService--> <mvc:annotation-driven conversion-service="conversionService"/>
3、验证转换器:
@Controller
public class ConverterController {
@RequestMapping("/converter/hello")
@ResponseBody
public Object converter(@ModelAttribute("phone") PhoneNumberModel phone) {
return phone;
}
}
输入URL验证:http://localhost/converter/hello?phone=012-12345678
二、引用: