2013-02-25 4 views
3

Я использую фреймворк Spring для получения JSON из запроса GET. Все работало просто замечательно, пока неправильное значение не был поставлен в БД, и это происходит:Игнорирование недопустимых значений в Джексоне, используя весну

02-25 14:46:04.035: E/AndroidRuntime(12271): org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Can not construct instance of java.util.Date from String value '-3600': not a valid representation (error: Failed to parse Date value '-3600': Can not parse date "-3600": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))

Как я настроить Джексон игнорировать их чтения/parseble значения? я скорее имею нуль или так, что мой полный json-анализ не сработает ...

вот мой объект, который я пытаюсь проанализировать, поскольку вы можете видеть, что я пытался игнорировать свойства с помощью jsonignoreproperties в моем коде.

поступления:

public class Receipt { 

    public String categories; 


    @JsonProperty("expiration_date") 
    public Date expirationDate; 

    public String image1; 

    public String image2; 
(.. more properties, getters and setters ..) 

И как я пытаюсь разобрать:

RestTemplate restTemplate = new RestTemplate(); 


    // instellen dat de converter ongedefineerde parameters negeert 
    HttpMessageConverter customconver = new MappingJackson2HttpMessageConverter(); 
    ((MappingJackson2HttpMessageConverter) customconver).getObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); //here the ignore unknown 

    restTemplate.getMessageConverters().add(customconver); 
    restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); 
    try { 
    // GET Request 
    ResponseEntity<ReceiptMessage> response = restTemplate.exchange(urlPath, HttpMethod.GET,requestEntity,ReceiptMessage.class); 

иметь в виду, что прежде, чем значение -3600 мой парсер работал отлично, так что нет никаких проблем.

Есть ли способ игнорировать такие ошибки?

ответ

0

Существует установка на ObjectMapper под названием WRITE_DATES_AS_TIMESTAMPS. Это заставляет даты быть сериализованными как longs вместо строк, поэтому отключите его, чтобы получить строки. Вы должны определенно прочитать следующее: http://wiki.fasterxml.com/JacksonFAQDateHandling

Если вы не хотите этого делать, чтобы игнорировать поле, основанное на некоторой логике, просто добавьте установщик для поля даты, который занимает много времени и проанализирует его самостоятельно. Вам, вероятно, нужно будет аннотировать его @JsonSetter("expiration_date"), поэтому Джексон знает, чтобы передать его там.

И наконец, API-интерфейсы даты/календаря Java, как правило, признаны абсолютно ужасными и их следует избегать в каждом случае. Если вы используете Java 8, новая дата/время apis намного лучше. Если вы до Java 8, используйте JodaTime. Существует даже специальный модуль Jackson для его обработки.

Смежные вопросы