@DateTimeFormatを使って注解するとエラーが発生します.

4413 ワード

Springbootフレームを使ってプロジェクトを構築する
@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;
    }

}