问题描述
- 前端提交数据的字段名称或者是字段类型和后台定义的类型不一致或者前端提交的参数跟后台需要的参数个数不一致,无法封装;
- 前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;
解决方法(自定义类型转换器)
案例是以日期格式为描述对象
Java部分
package cn.day.util;
import javafx.scene.input.DataFormat;
import org.springframework.core.convert.converter.Converter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDateConverter implements Converter<String, Date> {
/**
* 传入字符串source
* @param source
* @return
*/
@Override
public Date convert(String source) {
if (source == null){
throw new RuntimeException("请您传入数据!");
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//把字符串转化为日期
try {
return df.parse(source);
} catch (ParseException e) {
throw new RuntimeException("数据转化错误!");
}
}
}
对于数据的处理部分页面提交日期格式多种多样,对于不同人有不同的习惯,如日期2001/3/3;2004-2-2;2001、3、3;2010.3.3。此处配置日期就是2004-2-2格式的日期
package cn.day.domain;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private String uname;
private Integer age;
private Date date;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", age=" + age +
", date=" + date +
'}';
}
}
HTML部分
<form action="/param/saveUser" method="post">
用户名:<input type="text" name="uname"/><br/>
年龄:<input type="text" name="age"/><br/>
生日:<input type="text" name="date"/><br/>
<input type="submit" value="提交">
</form>
Spring mvc 配置文件部分
</bean>
<!-- 配置自定义类型转换器 -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="cn.day.util.StringToDateConverter"/>
</set>
</property>
</bean>
<!-- 配置spring开启注解mvc的支持-->
<mvc:annotation-driven conversion-service="conversionService"/>