2013-08-17 5 views
1

У меня возникла проблема с преобразованием объекта json в класс POJO.Использование внутреннего объекта класса во внешнем классе java

У меня есть открытый класс, называемый службой, и у него есть пользователь внутреннего класса. Я хочу использовать внутренний класс как контейнер/объект для хранения переменных для всех моих методов внешнего класса. Я пытаюсь сделать следующее, но я получаю ошибки компиляции. Пожалуйста, покажите, как я могу это сделать, и, пожалуйста, исправьте ошибку, которую я делаю в моем коде ниже.

Из затмения окна отладки, я см ниже JSON быть получен в переменном узле узла: { "FirstName": "ndndbs", "LastName": "dnjdnjs"}

Пробных 1:

public class Service { 
          // Method 
public boolean createUserAccount(JsonNode node) throws Exception { 
     ObjectMapper mapper = new ObjectMapper(); 
     User user=null; 
     try { 
      Service service=new Service(); 
      user = mapper.readValue(node, User.class);  
     } catch (Exception e) {throw new Exception("failed to bind json", e);} 

    System.out.println("Use this anywhere in method"+userNode.firstName); 
    } 

} 
           // Inner class 
public class User { 
     public String firstName; 
     public String lastName; 
    } 
     } 

OUTPUT: 
NULL POINTER EXCEPTION AND user=null even after execution of mapper.readValue() statement 
+0

Показать, как выглядит JsonNode (json и как вы инициализируете узел). –

+0

Получают ошибки компиляции или исключение нулевого объекта? –

+0

Hi Sotirios ... Я отредактировал и добавил узел Json в свой вопрос – pret

ответ

0

Из заявления

user = mapper.readValue(node, User.class); 

Не уверен, что о причине для NullPointerException (полный StackTrace может помочь). Похоже, ObjectMapper пытается создать экземпляр внутреннего класса через Reflection. Но создание экземпляра внутренних и вложенных классов не является прямым. См. Is it possible to create an instance of nested class using Java Reflection?.

в вашем случае

Service.User.class.class.getConstructors()[0].newInstance(serviceInstance); 

вместо

User.class.newInstance() 

, который был бы случаем с Обычными/Внешними классами. Я не уверен, что ObjectMapper предназначен для создания класса таким образом.

Предлагаю переместить User в общедоступный класс верхнего уровня в своем собственном источнике User.java, если у вас нет конкретного ограничения по дизайну, которое мне интересно узнать.

+1

Спасибо Prashant за ваш ответ ... – pret

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