Formatter与Converter的作用相同(如果没有了解过Converter,请先看另一篇springMVC自定义数据绑定-Converter),但是Formatter的源类型必须是字符串(由客户端发送数据基本为字符串类型)
写法
增加自定义的Formatter类
package my_formatter;
import java.text.ParseException;
import java.util.Locale;
import org.springframework.format.Formatter;
import domain.People;
public class PeopleFormatter implements Formatter<People>{
@Override
public String print(People arg0, Locale arg1) {
return "people:" + arg0 + ",Locale:" + arg1.toString();
}
@Override
public People parse(String arg0, Locale arg1) throws ParseException {
//id=12,name=你好,age=19,sex=25
String[] pStrings = arg0.split(",");
People people = new People();
people.setId(Long.valueOf(pStrings[0].split("=")[1]));
people.setName(pStrings[1].split("=")[1]);
people.setAge(Integer.valueOf(pStrings[2].split("=")[1]));
people.setSex(Integer.valueOf(pStrings[3].split("=")[1]));
return people;
}
}
配置文件
<mvc:annotation-driven conversion-service="peopleConversionService">
</mvc:annotation-driven>
<bean id="peopleConversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="my_formatter.PeopleFormatter"></bean>
</set>
</property>
</bean>
页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>formatter people</title>
</head>
<body>
<form action="test/getFormatPeople"
method="get">
eg:id=12,name=小华,age=12,sex=0<br/>
<input type="text" name="people">
<input type="submit" value="提交">
</form>
</body>
</html>
controller
@RequestMapping("/toFormatPeople")
public String toFormatPeople(){
return "formatPeople";
}
@RequestMapping("getFormatPeople")
public String getFormatPeople(People people,Model model){
model.addAttribute("message", people.toString());
return "first";
}