角度日付ピッカーを使用して、MVCコントローラにISO日付/ 時間のJavascript Dateオブジェクトを使用して日付を送信しています。ジャパンがISO DateTimeからJoda LocalDateを逆シリアル化する
デシリアライズ時には、java.util.Date
のように動作し、レコードを挿入するときには、Date
の時間をカットすることがHibernateで気になります。
今、私はjava.util.Date
からorg.joda.time.[APPROPRIATE_CLASS_HERE]
に移行しています。このデシリアライズの問題に直面しています。
DateTime
を私のDTOsに強制すると、ジャケットは正しく逆シリアル化されますが、ターゲットタイプが日付のときは時間情報を削除することをお勧めします。
など。
public class UserDto {
private LocaLDate passwordExpirationDate;
}
{
"username":"9493",
"completeName":"ljdjf",
"email":"[email protected]",
"cultureId":"IT",
"enabled":false,
"passwordExpirationDate":"2017-07-13T10:00:00.000Z",
"accountExpirationDate":"2017-07-20T10:00:00.000Z"
}
代わりに、私はこれを取得:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Invalid format: "2017-07-13T10:00:00.000Z" is malformed at "T10:00:00.000Z"; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Invalid format: "2017-07-13T10:00:00.000Z" is malformed at "T10:00:00.000Z" (through reference chain: it.phoenix.web.data.dtos.admin.profile.UserDTO["passwordExpirationDate"])
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:244) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Invalid format: "2017-07-13T10:00:00.000Z" is malformed at "T10:00:00.000Z" (through reference chain: it.phoenix.web.data.dtos.admin.profile.UserDTO["passwordExpirationDate"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:388) ~[jackson-databind-2.8.9.jar:2.8.9]
Caused by: java.lang.IllegalArgumentException: Invalid format: "2017-07-13T10:00:00.000Z" is malformed at "T10:00:00.000Z"
at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:900) ~[joda-time-2.9.9.jar:2.9.9]
at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:844) ~[joda-time-2.9.9.jar:2.9.9]
at com.fasterxml.jackson.datatype.joda.deser.LocalDateDeserializer.deserialize(LocalDateDeserializer.java:39) ~[jackson-datatype-joda-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.datatype.joda.deser.LocalDateDeserializer.deserialize(LocalDateDeserializer.java:15) ~[jackson-datatype-joda-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504) ~[jackson-databind-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:104) ~[jackson-databind-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:357) ~[jackson-databind-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) ~[jackson-databind-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814) ~[jackson-databind-2.8.9.jar:2.8.9]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2938) ~[jackson-databind-2.8.9.jar:2.8.9]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:241) ~[spring-web-4.3.9.RELEASE.jar:4.3.9.RELEASE]
... 92 more
質問は次のとおりです。ジャクソンは、単にデフォルト/現在のタイムゾーンの時刻部分をストリッピングすることによりジョダLocalDate
にDateTimeオブジェクトをデコードできるように、スマートな方法があります?
注: - 私はすでにジャクソンジョダモジュールの依存関係 を持っている - ジャクソンは2.8.9 ある - 私は私がjava.time
もの(ジャクソンJSR310とは、このような問題を持っていない、関連するJava 8のプロジェクトでJava 7を使用するように強制していますモジュール)
どれでもチャンスを動作するはずです後
また、提案されたソリューションのテストが終了しました。私は答えとして投稿します。 LocalDateタイプのすべてのプロパティに上記を適用するのを手伝ってもらえれば、私は解決策が気に入らないので、受け入れられた答えをあなたに授与します。 –
jacksonをどのように設定しますか?'ObjectMapper'を手動で作成するか、Angular固有の設定ファイルを使って設定しますか? –