Arhn - архитектура программирования

Использование Gson в классе, который определен в методе, возвращает null

У меня есть класс, который мне нужен только в одном методе... поэтому я объявил его в методе.

и теперь, когда я пытаюсь преобразовать объект из этого класса в json, используя gson, я получаю ноль.

мой код примерно такой:

private Response performGetClientDetails(HashMap<String, Object> requestMap) {

        class ClientDetails {
            String id;
            String name;
            String lastName;
            int accoundId;

            public ClientDetails(String id, String name, String lastName, int accoundId) {
                this.id = id;
                this.name = name;
                this.lastName = lastName;
                this.accoundId = accoundId;
            }
        }

        ClientDetails clientDetails = new ClientDetails(client.getId(), client.getFirstName(), client.getLastName(), client.getAccount().getId());
        Gson gson = new Gson();
        return new Response(true, gson.toJson(clientDetails));
    }

что возвращает null, так это: gson.toJson(clientDetails) .. он должен возвращать строку json.

23.04.2013

  • Что такое ноль? Возвращение performGetClientDetails? Что-то, что делает класс Response? Что конструктор Response делает со вторым аргументом? 24.04.2013
  • @mattb я отредактировал сообщение .. пожалуйста, посмотрите, спасибо. 24.04.2013

Ответы:


1

Согласно GSON Docs:

"Gson can not deserialize {"b":"abc"} into an instance of B since the class B is an inner class. if it was defined as static class B then Gson would have been able to deserialize the string. Another solution is to write a custom instance creator for B. "

public class InstanceCreatorForB implements InstanceCreator<A.B> {
  private final A a;
  public InstanceCreatorForB(A a)  {
    this.a = a;
  }
  public A.B createInstance(Type type) {
    return a.new B();
  }
}

The above is possible, but not recommended.

Поскольку вы используете нестатический внутренний класс, Gson не сможет сериализовать объект.

Вы можете попробовать второе решение, которое не рекомендуется использовать в вашем случае, или просто объявить класс ClientDetails сам по себе, что будет нормально работать.

23.04.2013
  • Большое спасибо :) я создал класс под названием: JsonClasses и поместил туда все внутренние классы, которые мне нужны, как внутренние классы. это хороший подход ?? 24.04.2013
  • Пожалуйста! Что ж, я не считаю использование внутренних классов хорошим подходом. Это будет мешать вашей работе по объявлению/получению информации и всегда будет иметь JsonClasses в корне вашего ответа Json. Я думаю, что внутренние классы более полезны в обработчиках событий и, возможно, в перечислениях. 24.04.2013
  • Понял. Спасибо! Я новичок в java, поэтому я пытаюсь понять, как все работает :) 24.04.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..