3 回答

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
這里不需要使用自定義序列化器/反序列化器。使用jackson-modules-java8的datetime模塊:
數(shù)據(jù)類型模塊使Jackson能夠識(shí)別Java 8 Date&Time API數(shù)據(jù)類型(JSR-310)。
持續(xù)時(shí)間
瞬間
LocalDateTime
LOCALDATE的
當(dāng)?shù)貢r(shí)間
月日
OffsetDateTime
OffsetTime
期
年
YearMonth
ZonedDateTime
了zoneid
ZoneOffset

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
由于歷史原因留下這個(gè)答案,但我不推薦它。請參閱上面接受的答案。
告訴Jackson使用您的自定義[de]序列化類進(jìn)行映射:
@JsonSerialize(using = LocalDateTimeSerializer.class)@JsonDeserialize(using = LocalDateTimeDeserializer.class)private LocalDateTime ignoreUntil;
提供自定義類:
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException { arg1.writeString(arg0.toString()); }}public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser arg0, DeserializationContext arg1) throws IOException { return LocalDateTime.parse(arg0.getText()); }}
隨機(jī)事實(shí):如果我在類之上嵌套并且不使它們靜態(tài),則錯(cuò)誤消息很奇怪: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果您使用的是fastxml的ObjectMapper類,默認(rèn)情況下ObjectMapper不了解LocalDateTime類,因此,您需要在gradle / maven中添加另一個(gè)依賴項(xiàng):
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.7.3'
現(xiàn)在您需要將此庫提供的數(shù)據(jù)類型支持注冊到objectmapper對象,這可以通過以下方式完成:
ObjectMapper objectMapper = new ObjectMapper();objectMapper.findAndRegisterModules();
現(xiàn)在,在您的jsonString中,您可以輕松地將java.LocalDateTime字段設(shè)置如下:
{ "user_id": 1, "score": 9, "date_time": "2016-05-28T17:39:44.937"}
通過這一切,您的Json文件到Java對象轉(zhuǎn)換將正常工作,您可以通過以下方式讀取該文件:
objectMapper.readValue(jsonString, new TypeReference<List<User>>() { });
添加回答
舉報(bào)