一、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
二、引用: