此类能够将前端传入的参数转换成你需要的格式
例如:需求为,前端传入一个时间戳的,后端是一个Date类型。
SpringMvc无法将String类型转换成Date。即可时间WebBingdingInitializer类。
1、在响应的Controller中创建方法并,在方法中添加@InitBinder(value="paramName")注解,注解中的value=参数名称。 只在此Controller中有效。@RestController@RequestMapping("/user")public class UserController { @GetMapping("/t") public Object t(Date date1, String id) { System.out.println("id: "+id); System.out.println(date1); return date1; } // 参数名称为date1的 @InitBinder(value="date1") public void t(WebDataBinder binder) { // 绑定类型,后端接收的数据类型为Date.class binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { // 当前端发送字符串的时间戳,后端接收数据时, 通过此方法将字符串转成Date类型 @Override public void setAsText(String text) throws IllegalArgumentException { setValue(new Date(Long.decode(text))); } // 当后端返回给前端时,会将Date类型转成字符串,返回给前端。 @Override public String getAsText() { return getValue().toString(); } }); }}
1、配置资源修改支持, 编写规则public class MyCustomDateEditor extends PropertyEditorSupport { /** * @see java.beans.PropertyEditorSupport#setAsText(java.lang.String) * 前端传入的是unix时间戳,也就是long型,然后后台接收到前端传入的这个参数时会先被转换为String类型, * 默认情况下,是不能将String转为Date类型的,所以我们再这里将String字符串变为Date类型! */ @Override public void setAsText(String text) throws IllegalArgumentException { setValue(new Date(Long.decode(text))); } /** * @see java.beans.PropertyEditorSupport#getAsText() * 后台给前端返回响应信息,也要处理Date类型,将Date类型转为String. */ @Override public String getAsText() { Date value = (Date) getValue(); return (value != null ? String.valueOf(TimeUnit.MILLISECONDS.toSeconds(value.getTime())) : ""); }}2、自定义WebBindingInitializer/** * @Description 扩展web初始化的配置,WebBindingInitializer实现全局属性编辑器配置 * @Author 一一哥Sun * @Date Created in 2020/3/24 */public class CustomDateWebBindingInitializer implements WebBindingInitializer { @Override public void initBinder(WebDataBinder binder) { // 设置时间 binder.registerCustomEditor(Date.class, new MyCustomDateEditor()); }}3、将自定义的WebBingdingInitializer配置到所有请求中@Configurationpublic class CustomDateEditorConfiguration { @Autowired public void setWebBindingInitializer(RequestMappingHandlerAdapter requestMappingHandlerAdapter) { //将自定义的CustomDateWebBindingInitializer属性编辑器绑定到RequestMappingHandlerAdapter里面. requestMappingHandlerAdapter.setWebBindingInitializer(new CustomDateWebBindingInitializer()); }}
注意:如果全局和局部都配置了,是使用全局配置,局部配置不生效。
留言与评论(共有 0 条评论) “” |