GH-2272 Register JavaTimeModule with BindingsLifecycleController's ObjectMapper

Resolves #2272
This commit is contained in:
Oleg Zhurakousky
2022-02-01 16:45:49 +01:00
parent 909f4af4b4
commit 800832d9ac

View File

@@ -22,11 +22,14 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.cloud.stream.binder.Binding;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
*
@@ -44,14 +47,27 @@ public class BindingsLifecycleController {
private final ObjectMapper objectMapper;
@SuppressWarnings("unchecked")
public BindingsLifecycleController(List<InputBindingLifecycle> inputBindingLifecycles,
List<OutputBindingLifecycle> outputBindingsLifecycles) {
Assert.notEmpty(inputBindingLifecycles,
"'inputBindingLifecycles' must not be null or empty");
this.inputBindingLifecycles = inputBindingLifecycles;
this.outputBindingsLifecycles = outputBindingsLifecycles;
this.objectMapper = new ObjectMapper(); //see https://github.com/spring-cloud/spring-cloud-stream/issues/2253
// we need to use ObjectMapper that could not be modified by the user.
try {
Class<? extends Module> javaTimeModuleClass = (Class<? extends Module>)
ClassUtils.forName("com.fasterxml.jackson.datatype.jsr310.JavaTimeModule", ClassUtils.getDefaultClassLoader());
Module javaTimeModule = BeanUtils.instantiateClass(javaTimeModuleClass);
this.objectMapper.registerModule(javaTimeModule);
}
catch (ClassNotFoundException ex) {
// ignore; jackson-datatype-jsr310 not available
}
}
/**