Переопределите Jackson-databind.ObjectMapper, чтобы принять BigDecimal в качестве String во время сериализации и десериализации в Spring web 4.x - PullRequest
0 голосов
/ 03 октября 2018

HashMap<String,String> содержит десятичное значение и должен рассматриваться как строка во время сериализации Джексона.Но мы получаем ошибку:

Error:
    Caused by: java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.String;Stack trace;    at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:41);
    Stack trace;    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFieldsUsing(MapSerializer.java:813);
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:637);
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:33);
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119);
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79);
    at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18);
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:718);
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:639);
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:33);
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480);
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:400);
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1392);
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:913);

Фрагмент кода:

@EnableWebMvc 
@Configuration
public class OverrideJackson extends WebMvcConfigurerAdapter{

    @Bean(name="objectMapper")
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();       
        mapper.configure(Feature.WRITE_BIGDECIMAL_AS_PLAIN, true);
        mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        return mapper;
    }
}
...