1

json オブジェクトを POJO クラスに変換する際に問題に直面しています。

Service というパブリック クラスがあり、内部クラス User があります。内部クラスをコンテナー/オブジェクトとして使用して、すべての外部クラス メソッドの変数を保持したいと考えています。以下を実行しようとしていますが、コンパイルエラーが発生します。これを行う方法を示して、以下のコードで行っている間違いを修正してください。

Eclipse デバッグ ウィンドウから、以下の json がノード変数 node で取得されていることがわかります: {"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
4

1 に答える 1

0

発言より

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

NullPointerException の原因が不明です (完全なスタック トレースが役立つ場合があります)。ObjectMapper がリフレクションを介して内部クラスのインスタンスを作成しようとしているようです。しかし、内部およびネストされたクラスのインスタンスを作成するのは簡単ではありません 。「 Java リフレクションを使用してネストされたクラスのインスタンスを作成することは可能ですか? 」を参照してください。.

あなたの場合

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

それ以外の

User.class.newInstance() 

これは、Usual/Outer クラスの場合でした。ObjectMapperこの方法でクラスをインスタンス化できるかどうかはわかりません。

User私が知りたい特定の設計制限がない限り、独自のソース User.java の最上位の public クラスに移動することをお勧めします。

于 2013-08-17T23:17:31.400 に答える