@DateTimeFormatを使って注解するとエラーが発生します.
4413 ワード
Springbootフレームを使ってプロジェクトを構築する
@DateTimeFormat作用は前後から楽屋までの時間フォーマットの変換で、「yyy-M-dd」形式の文字列を使って日付タイプデータに入ってきました.入力変換は大丈夫です.「yyyy-M-dd HH:mm:ss」形式の時間文字列を使うとエラーが発生します.
エラーメッセージ:
「message」:「Could not read document:Can not deserialize value of typejava.util.Date from String\2016-03-03 3 12:12\\「not a valid representation(error:Failed to parse to parse Darse Darse Darse Date Date Date value'2016.value'2016 2010 2010 2010-2010 2010-2009 2009 2009 2009 2009 2009-03'2010-03 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009-03'2010-12:2010-12:2010-2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009-12:12:M-dd'T'HH:mm:ss.SSS'Z',parsing fails(leniency?null)at[Source:java.io.PushbackInputStream@541af790ライン;ライン:3、column:14);nenenese exception iscostinxl.jackson.databind. exc.InvalidFormExttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttdededededededenininininininininininininin));nenenenese.nenenenenese eeeddddxxxxtrtrtrtrtron 2010 2010 2010 2010.emimimimimimimimimimimittttttttttttpresentation(error:Failed to parse Date value'2016-03-03 12 12:12':Can not parse date\"2016-03-03 12:12 Z\":while it seems to fit format'yyyy-M-dd'T'HH:mm:ss.sss.SSS'Z,parsnitfalle()PushbackInputStream@541af790ライン:3、column:14(through reference chain:comp.icbc.patrol.entity.vo.DemoVO[\"inputTime\")""
理由はspringbootがjacksonをデフォルトで採用していますが、jacksonは以下のような日付フォーマットしか認識できません.
1.longタイムスタンプを採用する:157191968000
2、参列の対象に@Json Format注を加えてタイムゾーンを指定する
参照https://blog.csdn.net/qq906627950/article/details/79503801
@DateTimeFormat作用は前後から楽屋までの時間フォーマットの変換で、「yyy-M-dd」形式の文字列を使って日付タイプデータに入ってきました.入力変換は大丈夫です.「yyyy-M-dd HH:mm:ss」形式の時間文字列を使うとエラーが発生します.
@Data
public class DemoVO {
private Date inputTime;
}
エラーメッセージ:
「message」:「Could not read document:Can not deserialize value of typejava.util.Date from String\2016-03-03 3 12:12\\「not a valid representation(error:Failed to parse to parse Darse Darse Darse Date Date Date value'2016.value'2016 2010 2010 2010-2010 2010-2009 2009 2009 2009 2009 2009-03'2010-03 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009-03'2010-12:2010-12:2010-2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009-12:12:M-dd'T'HH:mm:ss.SSS'Z',parsing fails(leniency?null)at[Source:java.io.PushbackInputStream@541af790ライン;ライン:3、column:14);nenenese exception iscostinxl.jackson.databind. exc.InvalidFormExttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttdededededededenininininininininininininin));nenenenese.nenenenenese eeeddddxxxxtrtrtrtrtron 2010 2010 2010 2010.emimimimimimimimimimimittttttttttttpresentation(error:Failed to parse Date value'2016-03-03 12 12:12':Can not parse date\"2016-03-03 12:12 Z\":while it seems to fit format'yyyy-M-dd'T'HH:mm:ss.sss.SSS'Z,parsnitfalle()PushbackInputStream@541af790ライン:3、column:14(through reference chain:comp.icbc.patrol.entity.vo.DemoVO[\"inputTime\")""
理由はspringbootがjacksonをデフォルトで採用していますが、jacksonは以下のような日付フォーマットしか認識できません.
"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
"yyyy-MM-dd";
"EEE, dd MMM yyyy HH:mm:ss zzz";
long ( )
解決方法は以下の種類があります.1.longタイムスタンプを採用する:157191968000
2、参列の対象に@Json Format注を加えてタイムゾーンを指定する
@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
プロジェクトでjson解析フレームをfastjsonフレームとして使用する場合、本体フィールドに@Json Formatを使ってフォーマット日付を書き込みます.@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
3、グローバル処理方式で一括処理し、このやり方を勧めて、springbootのデフォルト変換を書き直します.参照https://blog.csdn.net/qq906627950/article/details/79503801
public class MyDateFormat extends DateFormat {
private DateFormat dateFormat;
private SimpleDateFormat format1 = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
public MyDateFormat(DateFormat dateFormat) {
this.dateFormat = dateFormat;
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
return dateFormat.format(date, toAppendTo, fieldPosition);
}
@Override
public Date parse(String source, ParsePosition pos) {
Date date = null;
try {
date = format1.parse(source, pos);
} catch (Exception e) {
date = dateFormat.parse(source, pos);
}
return date;
}
//
@Override
public Date parse(String source) throws ParseException {
Date date = null;
try {
//
date = format1.parse(source);
} catch (Exception e) {
// ,
date = dateFormat.parse(source);
}
return date;
}
// clone clone jackson
@Override
public Object clone() {
Object format = dateFormat.clone();
return new MyDateFormat((DateFormat) format);
}
}
@Configuration
public class WebConfig {
@Autowired
private Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder;
@Bean
public MappingJackson2HttpMessageConverter MappingJsonpHttpMessageConverter() {
ObjectMapper mapper = jackson2ObjectMapperBuilder.build();
// ObjectMapper ,
// setDateFormat
DateFormat dateFormat = mapper.getDateFormat();
mapper.setDateFormat(new MyDateFormat(dateFormat));
MappingJackson2HttpMessageConverter mappingJsonpHttpMessageConverter = new MappingJackson2HttpMessageConverter(
mapper);
return mappingJsonpHttpMessageConverter;
}
}