前端時(shí)間單位用的是unix時(shí)間戳攒至,單位秒堕汞,而java后端用的是Date類型峻黍。
在request請(qǐng)求時(shí)复隆,如何把前端的時(shí)間戳類型優(yōu)雅的轉(zhuǎn)換為后端的Date類型呢。
如果你想在response時(shí)姆涩,把后端的Date類型轉(zhuǎn)換到前端的時(shí)間戳類型
可以看這篇文章java中JsonSerializer用法,前后端單位轉(zhuǎn)換必備
這里我使用的是SpringBoot框架挽拂。
Controller代碼
@RequestMapping(value = "/add", method = RequestMethod.POST)
public Result add(@Valid OrderForm form,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
}
OrderForm對(duì)象
@Data
public class OrderForm {
private String id;
private String userName;
private Date addTime;
}
這時(shí),如果直接傳addTime=1488264066是會(huì)報(bào)錯(cuò)的骨饿,提示類型不正確亏栈。
但如果你把a(bǔ)ddTime類型改成Long就可以
@Data
public class OrderForm {
private String id;
private String userName;
private Long addTime;
}
說明spring已經(jīng)幫我們做了String到Long的轉(zhuǎn)換,但是沒有做轉(zhuǎn)換到Date類型宏赘。
我們來擴(kuò)展即可仑扑。
在src/java/下建一個(gè)名字為bind的包。
下面放這3個(gè)java文件
/**
* 擴(kuò)展類型轉(zhuǎn)換
*/
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())) : "");
}
}
/**
* 擴(kuò)展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請(qǐng)求時(shí)生效
*/
@Configuration
public class CustomDateEditorConfiguration {
@Autowired
public void setWebBindingInitializer(RequestMappingHandlerAdapter requestMappingHandlerAdapter) {
requestMappingHandlerAdapter.setWebBindingInitializer(new CustomDateWebBindingInitializer());
}
}
配置好后置鼻,就可以接收到Date類型的內(nèi)容了镇饮,全局生效。