@JsonDeserialize自定義Json序列化
1.問題
在項目上使用SpringBoot為框架,調(diào)用第三方接口時,返回的參數(shù)Date類型,需要自定義進(jìn)行Json序列化,需要進(jìn)行處理,接受數(shù)據(jù)
2.現(xiàn)象
調(diào)用第三方接口,返回參數(shù)類型為Date類型,格式如下:
1
2
3
4
|
{ "created" : "2018-12-27 16:15:25" , "lastupd" : "2018-12-27 08:25:48" } |
返回Date類型數(shù)據(jù)格式為:yyyy-MM-dd HH:mm:ss,Json默認(rèn)序列化Date類型參數(shù),格式為:yyyy-MM-dd HH:mm:ss.SSS,則需要自定義進(jìn)行系列化
3.解決辦法
創(chuàng)建接收數(shù)據(jù)對象,生成Get\Set方法:,在Set方法上,加上@JsonDeserialize注解,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class TestDto implements Serializable { /** * 生成時間 * */ private Date created; /** * LastUpd * */ private Date lastUpd; ? public Date getCreated() { return created; } @JsonDeserialize (using = CustomJsonDateDeserializer. class ) public void setCreated(Date created) { this .created = created; } public Date getLastUpd() { return lastUpd; } @JsonDeserialize (using = CustomJsonDateDeserializer. class ) public void setLastUpd(Date lastUpd) { this .lastUpd = lastUpd; } } |
在進(jìn)行自定義序列化時,加上 @JsonDeserialize(using = CustomJsonDateDeserializer.class)注解,
其中@JsonDeserialize,表示告訴SpringBoot,當(dāng)前屬性進(jìn)行自定義系列化,則SpringBoot進(jìn)行序列化時,將會跳過這個參數(shù)
CustomJsonDateDeserializer.class為自定義序列化對象,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package com.test;? import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; ? import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; ? /** * 自定義序列化 **/ public class CustomJsonDateDeserializer extends JsonDeserializer<Date> { ? @Override public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); String date = jp.getText(); try { return format.parse(date); } catch (ParseException e) { throw new RuntimeException(e); } } } |
以上,接受數(shù)據(jù)時,會自定義進(jìn)行Json序列化,接收Date格式的數(shù)據(jù)。
@JsonSerialize與@JsonDeserialize使用
1.以注解方式使用
1
2
3
|
@JsonDeserialize (using= DateJsonDeserializer. class ) @JsonSerialize (using= DateJsonSerializer. class ) private Date time; |
2.自定義實現(xiàn)類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class DateJsonDeserializer extends JsonDeserializer<Date> { public static final SimpleDateFormat format= new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); @Override public Date deserialize(com.fasterxml.jackson.core.JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, com.fasterxml.jackson.core.JsonProcessingException { try { if (jsonParser!= null &&StringUtils.isNotEmpty(jsonParser.getText())){ return format.parse(jsonParser.getText()); } else { return null ; } } catch (Exception e) { System.out.println(e.getMessage()); throw new RuntimeException(e); } } } |
1
2
3
4
5
6
7
|
public class DateJsonSerializer extends JsonSerializer<Date> { public static final SimpleDateFormat format= new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); @Override public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(format.format(date)); } |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/wtb617806038/article/details/86095806