zoukankan      html  css  js  c++  java
  • 解析Health端点数据获取异常数据

    问题:

      由于健康节点响应类型是Health类,并且由于需要执行的健康状态类不固定,返回的类型数据的字段不是固定的,所以使用了@JsonAngGetter 注解,照成了解析这个JSON 结构非常不方便。

    目标:

      解析不太规范的Json数据结构,只获取异常描述信息。

    解决方式:

      如下示例

    package com.zjs.password.health;
    
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import lombok.Data;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author 李文
     * @create 2019-05-29 15:53
     **/
    public class jsonTest
    {
        @Data
        public static class HealthResponse
        {
            private String status;
            private Map<String, HealthData> other = new HashMap<>();
            public String getStatus() {
                return status;
            }
            public HealthResponse setStatus(String status) {
                this.status = status;
                return this;
            }
            @JsonAnyGetter
            public Map<String, HealthData> getOther() {
                return other;
            }
            @JsonAnySetter
            public void setOther(String key, HealthData value) {
                this.other.put(key, value);
            }
        }
    
        @Data
        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class HealthData
        {
            String status;
            String error;
        }
    
        public static void main(String[] args) throws Exception {
            ObjectMapper o = new ObjectMapper();
            String sad = "{"status":"DOWN","custom":{"status":"UP"},"test":{"status":"UP"},"rabbit":{"status":"UP","version":"3.7.7"},"db":{"status":"DOWN","error":"MySQL****"},"hystrix":{"status":"UP"}}";
            HealthResponse healthResponse = o.readValue(sad, HealthResponse.class);
            StringBuilder builder=new StringBuilder(8);
            if (!"UP".equals(healthResponse.getStatus()))
            {
                for (Map.Entry<String, HealthData> s : healthResponse.getOther().entrySet()) {
                    if (!"UP".equals(s.getValue().getStatus()))
                    {
                        builder.append(s.getKey()).append(" : ").append(s.getValue().getError()).append(" ");
                    }
                }
            }
            System.out.println(builder.toString());
            System.out.println(healthResponse.toString());
        }
    }
  • 相关阅读:
    CF13D. Triangles
    CF1142C. U2
    2020 省选模拟测试 Round #8 solution (20/02/07)
    2020 省选模拟测试 Round #7 solution (20/02/06)
    2020 省选模拟测试 Round #6 solution (20/02/05)
    2020 省选模拟测试 Round #5 solution (20/02/04)
    2020 省选模拟测试 Round #4 solution (20/02/03)
    CF1291D. Irreducible Anagrams
    CF1264E. Beautiful League
    bzoj2002 弹飞绵羊
  • 原文地址:https://www.cnblogs.com/atliwen/p/10944526.html
Copyright © 2011-2022 走看看