Treating "N/A" value as null with Jackson

Viewed 1686

I am getting data from an external JSON API and parsing the result with Jackson. Unfortunately, that API returns all fields as String and those are filled with "N/A" when data is unavailable.

I would like to replace those fields with null, especially as those are frustrating when I try to convert JSON String fields to more informative Java fields.

A custom DeserializationProblemHandler worked for Integer fields (see below), but it was useless for Java 8's LocalDate fields. Furthermore, it reacts to a problem rather than anticipating it.

I was unable to find a pre-processor to configure into my ObjectMapper and am uneasy with the idea of overriding the BeanDeserializer.

Do you know of a better/cleaner solution to handle this kind of situations? Thanks!


DeserializationProblemHandler

new DeserializationProblemHandler() {
    @Override
    public Object handleWeirdStringValue(DeserializationContext ctxt, Class<?> targetType, String valueToConvert, String failureMsg) throws IOException {
        return "N/A".equals(valueToConvert) ? null : super.handleWeirdStringValue(ctxt, targetType, valueToConvert, failureMsg);
    }
}

Error message when processing "N/A" in LocalDate field

Can not deserialize value of type java.time.LocalDate from String "N/A": Text 'N/A' could not be parsed at index 0

(works fine when there is date in the data)

1 Answers
Related