私は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で
どのように 'ObjectMapper'を設定しましたか?この機能は無効になっていますか? 'objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES、false);'? –
あなたのクラス 'MoodleUser'は、あなたがJSONから取得したものと同じメンバーを表示しません。たとえば、Jsonは文字列 'firstname'があると述べていますが、あなたの' MoodleUser'はそのフィールドを持っていません。だから、これらのフィールドを追加するか、あなたのクラスに注釈をつけて、ジャクソンにデシリアライズするものとシリアライズしないものとを教えてください。(注釈の例) – GameDroids
@Robby that configuration古いジャクソン版です。 Jackson 2.0では 'oMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES、false);'です。ヒントをありがとう – Alex