1. 程式人生 > >Spring Jackson 反序列化Date時遇到的問題

Spring Jackson 反序列化Date時遇到的問題

Jackson對於date的反序列化只支援幾種,如果不符合預設格式則會報一下錯誤

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-12 12:01:01": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
 at [Source: 
[email protected]
; line: 1, column: 2] (through reference chain: jerseyspring.representation.Order["payTime"]) at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163) at org.codehaus.jackson.map.deser.StdDeserializationContext.weirdStringException(StdDeserializationContext.java:243) at org.codehaus.jackson.map.deser.std.StdDeserializer._parseDate(StdDeserializer.java:577) at org.codehaus.jackson.map.deser.std.DateDeserializer.deserialize(DateDeserializer.java:28) at org.codehaus.jackson.map.deser.std.DateDeserializer.deserialize(DateDeserializer.java:19) at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299) at org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:414) at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697) at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580) at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2704) at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1315) at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:419)

解決方案:
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);
                }
	}

}

且在欄位的setter上加上註解
@JsonDeserialize(using = CustomJsonDateDeserializer.class)


相關推薦

關於Spring Jackson 序列Date遇到的問題

Jackson對於date的反序列化只支援幾種,如果不符合預設格式則會報一下錯誤 具體支援:("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss

Spring Jackson 序列Date遇到的問題

Jackson對於date的反序列化只支援幾種,如果不符合預設格式則會報一下錯誤 org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from

jackson序列忽略不需要的欄位

有時候,如果資料庫表中增加一個欄位,但返回的JSON字串中含有我們並不需要的欄位,那麼當對應的實體類中不含有該欄位時,會丟擲一個異常,告訴你有些欄位沒有在實體類中找到。解決辦法很簡單,在宣告ObjectMapper之後,加上上述程式碼: objectMapper.configure(Deserializat

Spring boot 配置jackson 序列時間格式、忽略實體中沒有的屬性

需要在繼承自 WebMvcConfigurerAdapter 的類中重寫configureMessageConverters 方法 @Override public void configureM

Jackson 序列 大小寫不敏感設定

常用配置 ObjectMapper objectMapper = new ObjectMapper(); objectMapp

小白審計JACKSON序列漏洞

ces serialize 簡單 mage 簡單介紹 rac led 代碼審計 ble 1. JACKSON漏洞解析 poc代碼:main.java import com.fasterxml.jackson.databind.ObjectMapper; import co

Jackson序列問題

JackSon和內部類,是的,你可以使用,但他們必須是靜態的內部類。 這是我直到今天沒有意識到的東西:這顯然是正確使用內部類在Java開發者社群的巨大的困惑。事實上有一些網頁顯示 JackSon不能使用內部類值。 這實際上是真實的和虛假的,原因就在於Java的內部類的特

Spring framework 序列的漏洞

理解這個漏洞需要先看freebuff上的jdni的小例子。這裡就不看了。 Server端程式碼: imort java.io.*; import java.net.*; public class ExploitableServer { public static void main(String[]

Spring-boot-redis序列Date資料型別

org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Can not deserialize value of type java.util.

jackson 序列複雜泛型物件

最近在使用Redis 快取資料的時候使用的spring 的aop自動從快取中去區json資料。發現方法的返回值帶有泛型時,直接簡單的呼叫使用下面的方法無法拿到正確的結果。 Method method = ((MethodSignature) pjp.getSignature(

java 物件序列和物件序列操作的版本相容性問題

當你一個類實現了Serializable介面,如果沒有定義serialVersionUID,Eclipse會提供這個提示功能告訴你去定義 。在Eclipse中點選類中warning的圖示一下,Eclipse就會自動給定兩種生成的方式。如果你沒有考慮到相容性問題時,就把它關掉,不過有這個功能是好的,只要任何類別

10 分鐘輕鬆學會 Jackson 序列自動適配子類

作者:丁儀 來源:https://chengxuzhixin.com/blog/post/Jackson-fan-xu-lie-hua-zi-dong-shi-pei-zi-lei.html   json 格式使用非常方便,通常情況下我們反序列化的時候需要指定具體型別。如果遇到繼承型別可能會解析

jackson實現序列序列解析

效率 出現 span jsonp cor 作用 pat 阿裏 控制 現在項目開發過程中,字符串的傳遞成為前後端交互的主要方式,主要是因為字符串不會出現亂碼等問題,傳送方式是字節碼傳遞,效率比實體較安全。 常見的Json類庫有Gson、JSON

jackson-- JsonTypeInfo多態序列

ont 序列 ade opera 反序列化 json images ima 2-2 簡單處理辦法:   JsonTypeInfo的註解使用: 略(自行百度即可)   處理下面這種json的處理辦法:     {"header":{"operationName":"opnam

jackson中自定義處理序列序列

public turn ali fast col ast mar 繼承 con http://jackyrong.iteye.com/blog/2005323 ********************************************** 對於一直用gson的

使用 JSON JavaScriptSerializer 進行序列序列出錯

ali rac service ons trac 字符 max sta spa 如題 報錯提示: 使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯。字符串的長度超過了為 maxJsonLength 屬性設置的值。","StackTra

【原創】Spring Data Redis <=2.0.3序列漏洞

反序列化 默認 用戶 字節碼 href http strong comm ons Spring Data Redis隸屬於Spring Data家族, 提供簡單易用的方式來訪問Redis緩存。 Spring Data Redis在往Redis裏面寫數據的時候,默認會先對數據

MVC JSON JavaScriptSerializer 進行序列序列出錯

MVC control中返回json格式資料一般都是如下格式 [HttpPost] public ActionResult CaseAudit(string name) { var data ="dasda";

記一次使用Jackson對Java物件序列序列的踩坑經歷

背景大概是這樣,專案中的兩個服務A和B依賴了同一個common包的Java類,A對該類json序列化,而B對其反序列化。在一次common包升級過程中,這個Java類中增加了一個屬性,由於B其實用不到這個屬性,就只把A給升級打包了,這就導致B在反序列化時出現了一個異常:com.fasterxml.j

使用JSON JavaScriptSerializer 進行序列序列出錯。字串的長度超過了為 maxJsonLength屬性

“/”應用程式中的伺服器錯誤。 使用 JSON JavaScriptSerializer 進行序列化或反序列化時出錯。字串的長度超過了為 maxJsonLength 屬性設定的值。 說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯