Jacksonは、JSONを処理するライブラリです。
Jacksonライブラリを使用すれば、JSONからJavaオブジェクトまたはJavaオブジェクトからJSONに簡単に変換できます。
JSONからJavaオブジェクトに変換
JSONからJavaオブジェクトに変換する方法です。
変換したいJSON
{
"errorType": "ValidationException",
"messages": {
"common": [
"E001:利用時間外です。",
"E002:通信エラーが発生しました。"
],
"user_id": [
"E003:ユーザIDを入力してください。",
"E004:パスワードを入力してください。"
]
}
}
マッピングするJavaクラス
クラスを分けて書くか、インナークラスにするか、どちらもOKです。
public class SampleError {
private String errorType;
private messageDetail messages;
public static class messageDetail {
private List<String> common;
private List<String> user_id;
}
}
Json→Javaクラスの変換
String json = 上記変換したいJSON;
ObjectMapper mapper = new ObjectMapper();
try {
errorList = mapper.readValue(json, SampleError.class);
} catch (JsonParseException | JsonMappingException | IOException e) {
e.printStackTrace();
}
もう少し複雑なJSON
構造は同じですが、キーは違うJSONを同一のJavaオブジェクトへマッピングしたいことがあるかもしれません。その際、どうすれば良いでしょうか?
例えば、以下のようなJSONです。エラー項目によって、キーが変わります。
{
"errorType": "ValidationException",
"messages": {
"common": [ ←エラー項目は「common」である
"E001:利用時間外です。",
"E002:通信エラーが発生しました。"
]
}
}
{
"errorType": "ValidationException",
"messages": {
"user_id": [ ←エラー項目は「user_id」である
"E003:ユーザIDを入力してください。",
"E004:パスワードを入力してください。"
]
}
}
{
"errorType": "ValidationException",
"messages": {
"password": [ ←エラー項目は「password」である
"E005:パスワードが間違いました。"
]
}
}
この場合、以下のようなJavaオブジェクトへマッピングできます。
public class SampleError {
private String errorType;
private messageDetail messages;
//項目によって、どちらフィールドに値を入りますが、その以外のフィールドはnullである。
public static class messageDetail {
private List<String> common;
private List<String> user_id;
private List<String> password;
}
//エラーメエセージを取得するMethodを追加すれば便利です。
public StringBuilder getErrMsg() {
StringBuilder errMsgSB = new StringBuilder();
if (common!=null) {
for(String errMsg: common) {
errMsgSB.append(errMsg);
errMsgSB.append("<br>");
}
return errMsgSB;
}
if (common!=null) {
for(String errMsg: common) {
errMsgSB.append(errMsg);
errMsgSB.append("<br>");
}
return errMsgSB;
}
}
}
コメント