Prevent automatic String to Integer conversion in Jackson

前端 未结 2 959
慢半拍i
慢半拍i 2021-01-05 00:54

I have a simple POJO:

public class ADate {
    private Integer day;
    private Integer month;
    private Integer year;
    ... // getters/setters/construct         


        
相关标签:
2条回答
  • 2021-01-05 01:17

    I've found the some interesting code on Jackson github issues. Changed it a little and that's what I got:

    public class ForceIntegerDeserializer extends JsonDeserializer<Integer> {
    
        @Override
        public int deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
            if (jsonParser.getCurrentToken() != JsonToken.VALUE_NUMBER_INT) {
                throw deserializationContext.wrongTokenException(jsonParser, JsonToken.VALUE_STRING, "Attempted to parse String to int but this is forbidden");
            }
            return jsonParser.getValueAsInt();
        }
    }
    
    0 讨论(0)
  • 2021-01-05 01:20

    There is a configuration setting on the ObjectMapper called the MapperFeature.ALLOW_COERCION_OF_SCALARS. If set to false, it will prevent ObjectMapper from coercing String representations of numbers and booleans into their Java counterparts. Only strict conversions will be allowed.

    Exact usage example:

    objectMapper.configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, false);
    

    References:

    [1] Add MapperFeature.ALLOW_COERCION_OF_SCALARS for enabling/disabling coercions #1106: https://github.com/FasterXML/jackson-databind/issues/1106

    [2] Prevent coercion of int from empty String to null if DeserializationFeature .FAIL_ON_NULL_FOR_PRIMITIVES is true #1095: https://github.com/FasterXML/jackson-databind/issues/1095

    [3] ALLOW_COERCION_OF_SCALARS http://fasterxml.github.io/jackson-databind/javadoc/2.9/

    0 讨论(0)
提交回复
热议问题