绑定参数之日期类型转换
1.方式一
@Controller
@RequestMapping("/date")
public class HandleDateController {
// 从前台--->后台传递参数: String ---> java.util.Date // http://localhost:8080/date/test1?d=2010-11-1
@RequestMapping("/test1")
public ModelAndView test1(@DateTimeFormat(pattern = "yyyy-MM-dd") Date d){
System.out.println(d);
return null;
}
}
2.方式二
@Data
public class User {
private Long id;
private String username;
private Integer age;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date hiredate;
}
@Controller
@RequestMapping("/date")
public class HandleDateController {
// http://localhost:8080/date/test1?id=2&username=zy&age=23&hiredate=2020-2-1
@RequestMapping("/test2")
public ModelAndView test2(User user){
System.out.println(user);
return null;
}
}
3.方式三
@ControllerAdvice注解
@Data
public class User {
private Long id;
private String username;
private Integer age;
private Date hiredate;
}
@ControllerAdvice
public class DateFormatAdvice {
// 如果不想每次都在Date类型上@DateTimeFormat
@InitBinder
public void initBinderDateType(WebDataBinder binder) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy-MM-dd");
binder.registerCustomEditor(java.util.Date.class, new CustomDateEditor(sdf, true));
}
}
// 处理JSON
@Controller
@RequestMapping("/json")
public class HandleJsonController {
@RequestMapping("/test3")
@ResponseBody
public User test3(){
User user = new User();
user.setUsername("will");
user.setAge(82);
user.setHiredate(new Date());
return user;
}
}
4.方式四
类型转换器Converter,全局类型转换。
/**
* 自定义类型转换器
*/
public class StringToDateConverter implements Converter<String,Date> {
/**
* 日期类型转换方法
* @param source
* @return
*/
@Override
public Date convert(String source) {
if(source==null){
throw new RuntimeException("日期参数不能为空!");
}
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd hh:mm");
try {
return sdf.parse(source);
} catch (ParseException e) {
throw new ClassCastException("日期类型转换异常");
}
}
}
还要在配置文件中加上如下配置:
<!--自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.ginger.wlfl.converter.StringToDateConverter"></bean>
</set>
</property>
</bean>
<!--引用自定义类型转换器-->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>