注意:在使用内置类型转换器时,请求参数输入值-源类型与接收参数类型-目标类型要兼容,否则会报 400 错误。请求参数类型与接收参数类型不兼容问题需要学习输入校验后才可解决。
java.time.LocalDate 类是 Java 8 的一个新类型,用来替代 java.util.Date。还需使用新的 Date/Time API 来替换旧有的 Date 和 Calendar 类。
名称 | 作用 |
---|---|
StringToBooleanConverter | String 到 boolean 类型转换 |
ObjectToStringConverter | Object 到 String 转换,调用 toString 方法转换 |
StringToNumberConverterFactory | String 到数字转换(例如 Integer、Long 等) |
NumberToNumberConverterFactory | 数字子类型(基本类型)到数字类型(包装类型)转换 |
StringToCharacterConverter | String 到 Character 转换,取字符串中的第一个字符 |
NumberToCharacterConverter | 数字子类型到 Character 转换 |
CharacterToNumberFactory | Character 到数字子类型转换 |
StringToEnumConverterFactory | String 到枚举类型转换,通过 Enum.valueOf 将字符串转换为需要的枚举类型 |
EnumToStringConverter | 枚举类型到 String 转换,返回枚举对象的 name 值 |
StringToLocaleConverter | String 到 java.util.Locale 转换 |
PropertiesToStringConverter | java.util.Properties 到 String 转换,默认通过 ISO-8859-1 解码 |
StringToPropertiesConverter | String 到 java.util.Properties 转换,默认使用 ISO-8859-1 编码 |
名称 | 作用 |
---|---|
ArrayToCollectionConverter | 任意数组到任意集合(List、Set)转换 |
CollectionToArrayConverter | 任意集合到任意数组转换 |
ArrayToArrayConverter | 任意数组到任意数组转换 |
CollectionToCollectionConverter | 集合之间的类型转换 |
MapToMapConverter | Map之间的类型转换 |
ArrayToStringConverter | 任意数组到 String 转换 |
StringToArrayConverter | 字符串到数组的转换,默认通过“,”分割,且去除字符串两边的空格(trim) |
ArrayToObjectConverter | 任意数组到 Object 的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回数组的第一个元素并进行类型转换 |
ObjectToArrayConverter | Object 到单元素数组转换 |
CollectionToStringConverter | 任意集合(List、Set)到 String 转换 |
StringToCollectionConverter | String 到集合(List、Set)转换,默认通过“,”分割,且去除字符串两边的空格(trim) |
CollectionToObjectConverter | 任意集合到任意 Object 的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换 |
ObjectToCollectionConverter | Object 到单元素集合的类型转换 |
类型转换是在视图与控制器相互传递数据时发生的。Spring MVC 框架对于基本类型(例如 int、long、float、double、boolean 以及 char 等)已经做好了基本类型转换.
步骤:
- 创建实体类。
- 创建控制器类。
- 创建自定义类型转换器类。
- 注册类型转换器。
- 创建相关视图。
举例:
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
String username;
String pwd;
}
@Controller
@RequestMapping("/sys")
public class ModelController {
@RequestMapping("/result")
protected String afterMethod(@RequestParam("user") User user,Model model){
model.addAttribute("user",user);
return "result";
}
}
@Component
public class ConvertController implements Converter<String, User> {
@Override
public User convert(String source) {
// 创建User实例
User user = new User();
// 以“,”分隔
String stringvalues[] = source.split(",");
if (stringvalues != null && stringvalues.length == 2) {
// 为user实例赋值
user.setUsername(stringvalues[0]);
user.setPwd(stringvalues[1]);
return user;
} else {
throw new IllegalArgumentException(String.format("类型转换失败, 需要格式'username, pwd',但格式是[% s ] ", source));
}
}
}
<mvc:annotation-driven conversion-service="conversionService"/>
<!--注册类型转换器UserConverter -->
<bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionService">
<property name="converters">
<list><bean class="com.zk.controller.ConvertController"/></list>
</property>
</bean>
<form action="/sys/result" method="post">
请输入用户信息(格式为username,pwd):
<input type="text" name="user" />
<input type="submit" value="提交">
</form>
<body>
结果:${user.username}:${user.pwd}
</body>