解析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());
    }
}

猜你喜欢

转载自www.cnblogs.com/atliwen/p/10944526.html