springmvc已经创建好了数据转换和数据绑定的类
如果我们的数据不符合他们定义好的格式,需要自己处理
处理方式两种
3.1 方式1 自定义转换类
3.1.1 创建转化类 extends PropertyEditorSupport
DateEditor.java
package com.test.binder;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//自定义转换类
public class DateEditor extends PropertyEditorSupport {
private SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
@Override
public void setAsText(String text) throws IllegalArgumentException {
Date date=null;
try {
date= simpleDateFormat.parse(text);
} catch (ParseException e) {
e.printStackTrace();
}
setValue(date); //将数据类型转换后的值 存入 对象的属性中
}
}
FloatEditor.java
package com.test.binder;
import java.beans.PropertyEditorSupport;
public class FloatEditor extends PropertyEditorSupport {
@Override
public void setAsText(String text) throws IllegalArgumentException {
// text 1,234,567 //金额
//去掉,
text=text.replaceAll(",","");
float value= Float.parseFloat(text);
setValue(value);
}
}
1.2 注册到WebDataBinder
在控制器中注册
@Controller
@RequestMapping("/card")
public class CardController {
@InitBinder
public void initBinder(WebDataBinder binder){
//注册自定义的绑定对象
binder.registerCustomEditor(Date.class,new DateEditor());
//如果对象属性是float 这里用float.class
//如果对象属性是Float 这里要用Float.class
binder.registerCustomEditor(float.class,new FloatEditor());
}
}
3.1.3 测试案例
package com.test.pojo;
import java.util.Date;
public class CardInfo {
private String cardID;
private String uname;
private float money;
private Date createTime;
public String getCardID() {
return cardID;
}
public void setCardID(String cardID) {
this.cardID = cardID;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "CardInfo{" +
"cardID='" + cardID + '\'' +
", uname='" + uname + '\'' +
", money=" + money +
", createTime=" + createTime +
'}';
}
}
package com.test.controller;
import com.test.binder.DateEditor;
import com.test.binder.FloatEditor;
import com.test.pojo.CardInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Date;
@Controller
@RequestMapping("/card")
public class CardController {
@InitBinder
public void initBinder(WebDataBinder binder){
//注册自定义的绑定对象
binder.registerCustomEditor(Date.class,new DateEditor());
//如果对象属性是float 这里用float.class
//如果对象属性是Float 这里要用Float.class
binder.registerCustomEditor(float.class,new FloatEditor());
}
@RequestMapping("/addCard")
public String addCard(CardInfo cardInfo)
{
System.out.println("---------");
System.out.println(cardInfo.getCardID());
System.out.println(cardInfo);
return "success";
}
}
3.2 通过注解的方式
3.2.1 设置配置信息,开启注解
springmvc.xml文件中添加
mvc:annotation-driven会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的,即解决了@Controller注解使用的前提配置。
同时它还提供了:数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB,读写JSON的支持(Jackson)。我们处理响应ajax请求时,就使用到了对json的支持(配置之后,在加入了jackson的core和mapper包之后,不写配置文件也能自动转换成json)。
3.2.2 在类CardInfo2类的属性中添加注解
//通过注解来实现数据类型的转换
public class CardInfo2 {
private String cardID;
private String uname;
@NumberFormat(pattern ="#,#.#" )
private float money;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date createTime;
public String getCardID() {
return cardID;
}
public void setCardID(String cardID) {
this.cardID = cardID;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "CardInfo{" +
"cardID='" + cardID + '\'' +
", uname='" + uname + '\'' +
", money=" + money +
", createTime=" + createTime +
'}';
}
}