2016-10-27 13 views
0

私はMoodle REST APIの呼び出しから得られたJSONオブジェクトを解析する必要があります。私が取得JSON応答は次のとおりです。ジャクソンとのMoodle Webサービスからjsonを非直列化

{"users":[{"id":2,"username":"admin","firstname":"Amministratore","lastname":"Utente","fullname":"Amministratore Utente","email":"[email protected]","department":"","firstaccess":1475831148,"lastaccess":1477493148,"description":"","descriptionformat":1,"profileimageurlsmall":"http:\/\/vmoodle.local\/theme\/image.php\/clean\/core\/1475846316\/u\/f2","profileimageurl":"http:\/\/vmoodle.local\/theme\/image.php\/clean\/core\/1475846316\/u\/f1","preferences":[{"name":"auth_manual_passwordupdatetime","value":"1475831184"},{"name":"email_bounce_count","value":"1"},{"name":"email_send_count","value":"1"},{"name":"_lastloaded","value":1477561370}]}],"warnings":[]} 

私はPOJOに、このJSONをマッピングしたいと思いますので、私は、2つのクラスを書いた:

public class MoodleUser { 

     public MoodleUser() { 
     } 

     private int id; 
     private String username; 

     /** 
     * @return the id 
     */ 
     public int getId() { 
      return id; 
     } 

     /** 
     * @param id the id to set 
     */ 
     public void setId(int id) { 
      this.id = id; 
     } 

     /** 
     * @return the username 
     */ 
     public String getUsername() { 
      return username; 
     } 

     /** 
     * @param username the username to set 
     */ 
     public void setUsername(String username) { 
      this.username = username; 
     } 

    } 

    public class MoodleUsers { 

     public MoodleUsers() { 

     } 

     private List<MoodleUser> users; 

     /** 
     * @return the users 
     */ 
     public List<MoodleUser> getUsers() { 
      return users; 
     } 

     /** 
     * @param users the users to set 
     */ 
     public void setUsers(List<MoodleUser> users) { 
      this.users = users; 
     } 

    } 

をそして私が呼ぶ:

MoodleUsers response = oMapper.readValue(result, MoodleUsers.class); 

次のエラーを報告する例外が表示されます。

com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of mypackage.lms.MoodleClientRest$MoodleUsers: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?) 
at [Source: {"users":[{"id":12,"username":"userok","firstname":"Nome test","lastname":"Cognome test","fullname":"Nome test Cognome test","email":"[email protected]","department":"","idnumber":"cftest","firstaccess":0,"lastaccess":0,"description":"","descriptionformat":1,"country":"IT","profileimageurlsmall":"http:\/\/vmoodle.local\/theme\/image.php\/clean\/core\/1475846316\/u\/f2","profileimageurl":"http:\/\/vmoodle.local\/theme\/image.php\/clean\/core\/1475846316\/u\/f1"}],"warnings":[]} 
; line: 1, column: 2] 
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:261) 
    at com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:1456) 
    at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1012) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1203) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148) 
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833) 

私はすでにpojoの中にデフォルトコンストラクタを持っているので、どこに問題があるのか​​理解できません。助言がありますか? ありがとうございます。

excpetionで
+0

どのように 'ObjectMapper'を設定しましたか?この機能は無効になっていますか? 'objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES、false);'? –

+0

あなたのクラス 'MoodleUser'は、あなたがJSONから取得したものと同じメンバーを表示しません。たとえば、Jsonは文字列 'firstname'があると述べていますが、あなたの' MoodleUser'はそのフィールドを持っていません。だから、これらのフィールドを追加するか、あなたのクラスに注釈をつけて、ジャクソンにデシリアライズするものとシリアライズしないものとを教えてください。(注釈の例) – GameDroids

+0

@Robby that configuration古いジャクソン版です。 Jackson 2.0では 'oMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES、false);'です。ヒントをありがとう – Alex

答えて

0

クラスの名前:mypackage.lms.MoodleClientRest$MoodleUsersMoodleUsersMoodleClientRestの内部クラスであり、その場合には、それははジャクソンが正常にオブジェクトをインスタンス化するためには、公共静的であるとを持っていることを示唆しています。

+0

これは問題だった。とにかく、私のpojoがjsonのすべての属性を定義していないという事実のために、クラスをスタンドアロンクラスとして宣言すると、別の例外が発生します。 'com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized field ( "id"、 "username"))) 私はそれを解決するために他のコメントの提案をチェックします。 – Alex

関連する問題