問題:
応答タイプは、健康保健ノードクラスによるもので、このクラスは、構造を解析するJSONなど@JsonAngGetter注釈の使用は、非常に不便になったので、データフィールドの戻り値の型は、固定されていない健康状態が固定されていないため、ために実行する必要があります。
目標:
分析データ構造JSONは標準化され、情報が唯一の例外の説明を取得していません。
ソリューション:
次の例
パッケージcom.zjs.password.health。 輸入com.fasterxml.jackson.annotation.JsonAnyGetter。 輸入com.fasterxml.jackson.annotation.JsonAnySetter。 輸入com.fasterxml.jackson.annotation.JsonIgnoreProperties。 輸入com.fasterxml.jackson.databind.ObjectMapper。 輸入lombok.Data。 輸入java.util.HashMapを; 輸入java.util.Map; / ** * @author 李文 * @Create 2019年5月29日午後03時53分 * * / パブリック クラスjsonTest { @Data パブリック 静的 クラス HealthResponse { プライベート文字列の状態。 プライベート地図<文字列、HealthData>その他= 新しい HashMapの<> (); パブリック文字列のgetStatus(){ リターン・ステータス、 } 公共HealthResponseのsetStatus(文字列状態){ この .status = ステータス。 返す これを。 } @JsonAnyGetter パブリックマップの<string、HealthData> getOther(){ 戻りその他; } @JsonAnySetter 公共 のボイドsetOther(文字列キー、HealthData値){ この.other.put(キー、値)。 } } @Data @JsonIgnoreProperties(ignoreUnknown = 真) パブリック 静的 クラスHealthData { 文字列のステータス。 文字列のエラー。 } パブリック 静的 ボイドメイン(文字列[]引数)スロー例外{ ObjectMapper O = 新しいObjectMapperを(); 悲しい文字列= "{\"ステータス\ ":\" DOWN \ "\ "カスタム\ UP \: "\ ""}、\ "テスト\"{\"ステータス\":{\ "ステータス\":\" UP \ "}、\"ウサギ\ ":{\"ステータス\ ":\" UP \ "\ "バージョン\":\ "3.7.7 \"}、\ "DB \":{\"ステータス\ MySQLの****:\ "\ ""}、\ "hystrixの\":{\ "ステータス\":\ "エラー\ "\": "\" DOWN \ UP \"}}" 。 HealthResponse healthResponse = o.readValue(悲しい、HealthResponse。クラス)。 StringBuilderビルダー = 新しい StringBuilderの(8 ); もし(! "UP" .equals(healthResponse.getStatus())) { のため(のMap.Entry < { builder.append(s.getKey())(追記。 ": ").append(""アペンド(s.getValue()getError()。)。 )。 } } } のSystem.out.println(builder.toString())。 System.out.println(healthResponse.toString())。 } }