springmvc之数据类型转换

 一、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

二、引用:

开涛的博客:http://jinnianshilongnian.iteye.com/blog/1723270

猜你喜欢

转载自tiro-li.iteye.com/blog/2274718
今日推荐