2323package org.camunda.community.rest.client
2424
2525import com.fasterxml.jackson.annotation.JsonFormat
26- import com.fasterxml.jackson.databind.DeserializationFeature
27- import com.fasterxml.jackson.databind.SerializationFeature
28- import com.fasterxml.jackson.databind.ser.std.DateSerializer
29- import com.fasterxml.jackson.datatype.jsr310.ser.OffsetDateTimeSerializer
3026import feign.Logger
3127import feign.Retryer
3228import feign.codec.Encoder
3329import org.camunda.community.rest.client.KeyChangingSpringManyMultipartFilesWriter.Companion.camundaMultipartFormEncoder
34- import org.springframework.beans.factory.ObjectFactory
3530import org.springframework.beans.factory.ObjectProvider
3631import org.springframework.beans.factory.annotation.Value
3732import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
3833import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
39- import org.springframework.boot.autoconfigure.http.HttpMessageConverters
4034import org.springframework.cloud.openfeign.EnableFeignClients
4135import org.springframework.cloud.openfeign.support.FeignEncoderProperties
42- import org.springframework.cloud.openfeign.support.HttpMessageConverterCustomizer
36+ import org.springframework.cloud.openfeign.support.FeignHttpMessageConverters
4337import org.springframework.cloud.openfeign.support.SpringEncoder
4438import org.springframework.context.annotation.Bean
4539import org.springframework.context.annotation.Configuration
46- import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder
47- import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
40+ import org.springframework.http.converter.HttpMessageConverter
41+ import org.springframework.http.converter.json.JacksonJsonHttpMessageConverter
42+ import tools.jackson.databind.DeserializationFeature
43+ import tools.jackson.databind.SerializationFeature
44+ import tools.jackson.databind.cfg.DateTimeFeature
45+ import tools.jackson.databind.ext.javatime.ser.OffsetDateTimeSerializer
46+ import tools.jackson.databind.json.JsonMapper
47+ import tools.jackson.databind.module.SimpleModule
48+ import tools.jackson.databind.ser.jdk.JavaUtilDateSerializer
4849import java.text.SimpleDateFormat
4950import java.time.format.DateTimeFormatter
5051
@@ -55,14 +56,20 @@ import java.time.format.DateTimeFormatter
5556@EnableFeignClients
5657class FeignClientConfiguration {
5758
59+ object CustomOffsetDateTimeSerializer : OffsetDateTimeSerializer(
60+ OffsetDateTimeSerializer .INSTANCE ,
61+ false ,
62+ DateTimeFormatter .ofPattern("yyyy-MM -dd'T 'HH :mm:ss.SSSZ "),
63+ JsonFormat .Shape .STRING
64+ )
65+
5866 @Bean
5967 @ConditionalOnMissingBean
6068 fun camundaFeignEncoder (
6169 feignEncoderProperties : FeignEncoderProperties ,
62- customizers : ObjectProvider <HttpMessageConverterCustomizer >
70+ converters : ObjectProvider <FeignHttpMessageConverters >
6371 ): Encoder {
64- val myConverters = camunda7feignHttpMessageConverters()
65- return SpringEncoder (camundaMultipartFormEncoder(), myConverters, feignEncoderProperties, customizers)
72+ return SpringEncoder (camundaMultipartFormEncoder(), feignEncoderProperties, converters)
6673 }
6774
6875 @Bean
@@ -76,36 +83,22 @@ class FeignClientConfiguration {
7683 fun feignLoggerLevel (@Value(" \$ {feign.client.config.default.loggerLevel}" ) defaultLogLevel : String ) =
7784 Logger .Level .valueOf(defaultLogLevel)
7885
79-
80- /* *
81- * Create an object factory for the message converter with the customized object mapper.
82- */
83- fun camunda7feignHttpMessageConverters (): ObjectFactory <HttpMessageConverters > {
84- val builder = Jackson2ObjectMapperBuilder
85- .json()
86- .featuresToDisable(
87- DeserializationFeature .ADJUST_DATES_TO_CONTEXT_TIME_ZONE ,
88- SerializationFeature .WRITE_DATES_AS_TIMESTAMPS
89- )
90- .serializers(
91- OffsetDateTimeSerializer (
92- OffsetDateTimeSerializer .INSTANCE ,
93- false ,
94- DateTimeFormatter .ofPattern(" yyyy-MM-dd'T'HH:mm:ss.SSSZ" ),
95- JsonFormat .Shape .STRING
96- ),
97- DateSerializer (
98- false ,
99- SimpleDateFormat (" yyyy-MM-dd'T'HH:mm:ss.SSSZ" )
100- )
101- )
102- return ObjectFactory <HttpMessageConverters > {
103- HttpMessageConverters (
104- listOf (
105- MappingJackson2HttpMessageConverter (builder.build())
106- )
86+ @Bean
87+ fun jsonHttpMessageConverter (): HttpMessageConverter <* > {
88+ val module = SimpleModule ()
89+ module.addSerializer(CustomOffsetDateTimeSerializer )
90+ module.addSerializer(
91+ JavaUtilDateSerializer (
92+ false ,
93+ SimpleDateFormat (" yyyy-MM-dd'T'HH:mm:ss.SSSZ" )
10794 )
108- }
95+ )
96+ val builder = JsonMapper .builder()
97+ .disable(DateTimeFeature .ADJUST_DATES_TO_CONTEXT_TIME_ZONE )
98+ .disable(DateTimeFeature .WRITE_DATES_AS_TIMESTAMPS )
99+ .addModule(module)
100+ return JacksonJsonHttpMessageConverter (builder)
109101 }
102+
110103}
111104
0 commit comments