저는 Angular2 프론트 엔드로 REST API를 만들고 있습니다. 잭슨에 대한 내 봄 구성에서 나는 spring.jackson.date-format=EEE MMM dd yyyy HH:mm:ss zzz (zzzz)
을 설정했는데, 그 이유는 다음과 같이 날짜를 출력하는 bootstrap-datepicker 플러그인을 사용하기 때문이다 : Wed May 31 2017 00:00:00 GMT+0200 (W. Europe Daylight Time)
. 이 같은 변수가있는 DTO에 날짜를 게시하려고 할 때 private Date defaultDatetime;
REST API는 400 개의 잘못된 요청 오류를 반환합니다.Angular2 봄 부팅 날짜 직렬화
{"timestamp":"mer. mai 03 2017 14:16:47",
"status":400,
"error":"Bad Request",
"exception":"org.springframework.http.converter.HttpMessageNotReadableException",
"message":"Could not read document: Can not construct instance of java.util.Date from String value '2017-05-01T22:00:00.000Z': not a valid representation (error: Failed to parse Date value '2017-05-01T22:00:00.000Z': Unparseable date: \"2017-05-01T22:00:00.000Z\")\n at [Source: [email protected]; line: 1, column: 68] (through reference chain: ch.heigvd.form.api.dto.FormDTO[\"fields\"]->java.util.ArrayList[0]->ch.heigvd.form.api.dto.field.DateFieldDTO[\"defaultDate\"]); nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String value '2017-05-01T22:00:00.000Z': not a valid representation (error: Failed to parse Date value '2017-05-01T22:00:00.000Z': Unparseable date: \"2017-05-01T22:00:00.000Z\")\n at [Source: [email protected]; line: 1, column: 68] (through reference chain: ch.heigvd.form.api.dto.FormDTO[\"fields\"]->java.util.ArrayList[0]->ch.heigvd.form.api.dto.field.DateFieldDTO[\"defaultDate\"])",
"path":"/api/forms"}
어떤 종류의 날짜 형식을 내가 jackson deserializatrion에 넣어야하는지 알고 싶습니다. 또는 프런트 엔드에서 형식을 직접 변경해야합니까?
업데이트
나는 그것이 사용자 정의 직렬화 작업을 얻었다. 이것이 특성 파일의 구성입니다.
public class CustomJsonDateDeserializer extends ISO8601DateFormat {
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
toAppendTo.append(format.format(date));
return toAppendTo;
}
@Override
public Date parse(String source, ParsePosition pos) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
return format.parse(source);
} catch (ParseException var4) {
return null;
}
}
}
나는 boostrsrap-datepicker가 js'Date()'객체를 반환한다는 것을 확신합니다. 백엔드 요청을하면'JSON.stringify (date)'가되며, 문자열은' "2017-05-03T15 : 07 : 34.056Z"'로 반환됩니다. 동일한 오류 메시지가 나타납니다. 따라서 Jackson 형식을 해당 형식을 구문 분석 할 수 있도록 설정하십시오. –