aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Vitaly Takmazov2022-12-08 10:38:06 +0300
committerGravatar Vitaly Takmazov2022-12-08 10:38:06 +0300
commit6351b30a8e38dd5c302b9535d217aec0b54acc97 (patch)
tree21d3e395f6fbca53d8ede9900e28e1c11c934164
parentccdb57fa3932785811faf9dd42d5998e4f1ea14b (diff)
Lenient JSON deserialization
-rw-r--r--src/main/java/com/juick/config/JacksonConfig.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/java/com/juick/config/JacksonConfig.java b/src/main/java/com/juick/config/JacksonConfig.java
new file mode 100644
index 00000000..bcffeae3
--- /dev/null
+++ b/src/main/java/com/juick/config/JacksonConfig.java
@@ -0,0 +1,42 @@
+package com.juick.config;
+
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.deser.DeserializationProblemHandler;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+
+@Configuration
+public class JacksonConfig {
+ Logger logger = LoggerFactory.getLogger("JSON");
+
+ @Bean
+ com.fasterxml.jackson.databind.Module lenientDeserializationModule() {
+ return new SimpleModule() {
+ @Override
+ public void setupModule(SetupContext context) {
+ super.setupModule(context);
+ context.addDeserializationProblemHandler(new DeserializationProblemHandler() {
+ @Override
+ public Object handleWeirdStringValue(DeserializationContext ctxt, Class<?> targetType,
+ String valueToConvert, String failureMsg) throws IOException {
+ logger.info("invalid string value '{}': {}", valueToConvert, failureMsg);
+ return null;
+ }
+
+ @Override
+ public Object handleWeirdNumberValue(DeserializationContext ctxt, Class<?> targetType,
+ Number valueToConvert, String failureMsg) throws IOException {
+ logger.info("invalid number value '{}': {}", valueToConvert, failureMsg);
+ return null;
+ }
+ });
+ }
+ };
+ }
+}