前端时间单位用的是unix时间戳,单位秒,而java后端用的是Date类型。
在request请求时,如何把前端的时间戳类型优雅的转换为后端的Date类型呢。
如果你想在response时,把后端的Date类型转换到前端的时间戳类型
可以看这篇文章java中JsonSerializer用法,前后端单位转换必备
这里我使用的是SpringBoot框架。
Controller代码
@RequestMapping(value = "/add", method = RequestMethod.POST)
public Result add(@Valid OrderForm form,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
}
OrderForm对象
@Data
public class OrderForm {
private String id;
private String userName;
private Date addTime;
}
这时,如果直接传addTime=1488264066是会报错的,提示类型不正确。
但如果你把addTime类型改成Long就可以
@Data
public class OrderForm {
private String id;
private String userName;
private Long addTime;
}
说明spring已经帮我们做了String到Long的转换,但是没有做转换到Date类型。
我们来扩展即可。
在src/java/下建一个名字为bind的包。
下面放这3个java文件
/**
* 扩展类型转换
*/
public class CustomDateEditor extends PropertyEditorSupport {
/**
* @see java.beans.PropertyEditorSupport#setAsText(java.lang.String)
*/
@Override
public void setAsText(String text) throws IllegalArgumentException {
setValue(new Date(Long.decode(text)));
}
/**
* @see java.beans.PropertyEditorSupport#getAsText()
*/
@Override
public String getAsText() {
Date value = (Date) getValue();
return (value != null ? String.valueOf(TimeUnit.MILLISECONDS.toSeconds(value.getTime())) : "");
}
}
/**
* 扩展web初始化的配置
*/
public class CustomDateWebBindingInitializer implements WebBindingInitializer {
/**
* @see org.springframework.web.bind.support.WebBindingInitializer#initBinder(org.springframework.web.bind.WebDataBinder,
* org.springframework.web.context.request.WebRequest)
*/
@Override
public void initBinder(WebDataBinder binder, WebRequest request) {
binder.registerCustomEditor(Date.class, new CustomDateEditor());
}
}
/**
* 让配置在request请求时生效
*/
@Configuration
public class CustomDateEditorConfiguration {
@Autowired
public void setWebBindingInitializer(RequestMappingHandlerAdapter requestMappingHandlerAdapter) {
requestMappingHandlerAdapter.setWebBindingInitializer(new CustomDateWebBindingInitializer());
}
}
配置好后,就可以接收到Date类型的内容了,全局生效。
网友评论