Даты разбора Gson: NumberFormatException - PullRequest
0 голосов
/ 10 апреля 2019

Я довольно новичок в Java и Gson, и я пытался разобрать какую-то дату из API nobelprize.org.Я был в состоянии разобрать некоторую информацию, но когда я включаю даты, я, кажется, всегда сталкиваюсь с ошибками.Как мне исправить эту ошибку?

Я пытался .setDateFormat ("гггг-ММ-дд"), но все равно получаю ту же ошибку.

Gson mainparser = new GsonBuilder()
.setDateFormat("yyyy-MM-dd")
.create();

mainparser.fromJson(line, ParsedJson.class);
public class ParsedJson {

    List<Laureates> laureates;

    public List<Laureates> getLaureates() {
        return laureates;
    }

    public void setLaureates(List<Laureates> laureates) {
        this.laureates = laureates;
    }


}
public class Laureates {
    int id;
    String firstname;
    String surname;
    Date born;
    Date died;
    String bornCountry;
    String bornCountryCode;
    String bornCity;
    String diedCountry;
    String diedCountryCode;
    String diedCity;
    String gender;
    List<Prizes> prizes;
...Getters/Setters

}

Это ошибка, которую я получаю:

java.lang.reflect.InvocationTargetException

Caused by: com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "1845-03-27"

Caused by: java.lang.NumberFormatException: For input string: "1845-03-27"

* Редактировать: Пример Json

    "laureates": [
        {
            "id": "1",
            "firstname": "Wilhelm Conrad",
            "surname": "Röntgen",
            "born": "1845-03-27",
            "died": "1923-02-10",
            "bornCountry": "Prussia (now Germany)",
            "bornCountryCode": "DE",
            "bornCity": "Lennep (now Remscheid)",
            "diedCountry": "Germany",
            "diedCountryCode": "DE",
            "diedCity": "Munich",
            "gender": "male",
            "prizes": [
                {
                    "year": "1901",
                    "category": "physics",
                    "share": "1",
                    "motivation": "\"in recognition of the extraordinary services he has rendered by the discovery of the remarkable rays subsequently named after him\"",
                    "affiliations": [
                        {
                            "name": "Munich University",
                            "city": "Munich",
                            "country": "Germany"
                        }
                    ]
                }
            ]
        },
]

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете попробовать использовать JsonDeserializer для Date атрибутов.

public class DateDeserializer implements JsonDeserializer<Date> {

   public DateDeserializer() {
   }

    @Override
    public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
        String dateStr = element.getAsString();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
        try {
            return format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}

в классе вашей модели добавьте JsonAdapter для атрибутов

public class Laureates {
    int id;
    String firstname;
    String surname;
    @JsonAdapter(DateDeserializer.class)
    Date born;
    @JsonAdapter(DateDeserializer.class)
    Date died;
    String bornCountry;
    String bornCountryCode;
    String bornCity;
    String diedCountry;
    String diedCountryCode;
    String diedCity;
    String gender;
    List<Prizes> prizes;
...Getters/Setters

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...