2016-09-21 80 views
2

我通常在使用Jackson Library時使用mixins來執行自定義序列化和反序列化。 Spring Boot應用程序中的RestController的方法類似於下面列出的方法。我猜Spring Boot使用Jackson將VerifyAccountResponse序列化爲字符串。但是,當它們轉換爲字符串時,這會將我的日曆/日期對象轉換爲長整型值。我可以通過使用自定義序列化器將它們轉換爲適當的格式。不過,我不得不在序列化後將返回類型更改爲對象。有沒有辦法保留相同的簽名並將自定義序列化器添加到由Spring Boot執行的默認序列化中。Spring Boot - 自定義JSON序列化

@RequestMapping(value ="verifyAccount", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<VerifyAccountResponse> verifyAccount(@RequestBody VerifyAccountRequest request) { 

    VerifyAccountResponse response = service.verifyAccount(request); 

    return new ResponseEntity<VerifyAccountResponse>(response, HttpStatus.OK); 
} 

編輯:

Updated the below based on the answers , but mixin doesn't seem to take effect - 

@Bean 
public Jackson2ObjectMapperBuilder objectMapperBuilder() { 
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); 

    builder.mixIn(ConnectStatus.class, com.datacast.service.util.DateFormatSerializerMixin.class); 

    return builder; 
} 

編輯2:

我創建了一個簡單的彈簧啓動項目來測試這一點,並能正常工作。但是當我在我的大型項目中使用這種方法時,日期轉換不會發生。 Jackson2ObjectMapperBuilder有沒有什麼可以重寫?

+0

你可以添加當前的序列化和慾望的例子嗎?您可以隨時註釋您的bean以使用自定義序列化,Spring-Boot將使用它。 – jbarrueta

+0

@jbarrueta我的課程在一個jar文件中,我無法在它們上添加註釋。我正在使用Jackson mixins進行序列化 –

+0

這可能會幫助您:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-customize-the- jackson-objectmapper – jbarrueta

回答

3

您可以通過很多方式在Spring引導應用程序中自定義Jackson序列化程序。請考慮檢查春季啓動參考指南中關於傑克遜的文檔:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#howto-customize-the-jackson-objectmapper

您可以通過使用Jackson2ObjectMapperBuilder配置自定義序列。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.html#serializerByType-java.lang.Class-com.fasterxml.jackson.databind.JsonSerializer-

+0

謝謝@Lakatos。我更新了mixin,但仍然沒有生效。我更新了原始帖子中的代碼。 –

+0

我在一個單獨的程序中實現了這個功能,這很好。但是,當我在我的應用程序中使用它時,它沒有返回格式化的日期。我正在使用EnableMvc註釋的幾個罐子擴展類。我懷疑這導致序列化執行。 –

1

您可以自定義日期格式(我知道這是你的文章的主要原因)通過設置屬性

spring.jackson.date-format= 
# Date format string or a fully-qualified date format class name. 
For instance `yyyy-MM-dd HH:mm:ss`. 
+0

謝謝@dimuha。但我有多個日期字段,每個都有不同的格式。 –