【问题标题】:How to get specific object from RestTemplate exchange method?如何从 RestTemplate 交换方法中获取特定对象?
【发布时间】:2016-08-10 07:05:05
【问题描述】:

我有一个端点,它返回给我这个响应:

{
  "head": {
    "status": 200,
    "ok": true,
    "messages": [],
    "errors": [],
    "references": {}
  },
  "body": {
    "id": "d57a9c7aef9842c2e31a0f49c",
    "flowId": "f57979d06f9842c3e94f1f197",
    "creationDate": 1470744494732,
    "path": "/luafanti/test",
    "version": 0,
    "elems": {
      "xxx": {
        "type": "integer",
        "value": 200
      }
    }
  }
}

我的问题是,如何制作一个只能填充我的一部分 json 响应的模型。例如,这样:

 "xxx": {
            "type": "integer",
            "value": 200
        }

或者这个:

"elems": {
          "xxx": {
            "type": "integer",
            "value": 200
          }
        }

【问题讨论】:

    标签: java json spring rest web


    【解决方案1】:

    使用 Jackson,您可以将模型定义如下:

    @JsonIgnoreProperties(ignoreUnknown=true)
    public class MyResponseModel {
      private Body body;
    
      public void setBody(Body body) {this.body = body;}
      public Body getBody() {return body;}
    
      @JsonIgnoreProperties(ignoreUnknown=true)
      public static class Body {
        private Elems elems;
        // getter and setter for elems 
      }
    
      @JsonIgnoreProperties(ignoreUnknown=true)
      public static class Elems {
        private Xxx xxx;
        // getter and setter for xxx 
      }
    
      @JsonIgnoreProperties(ignoreUnknown=true)
      public static class Xxx {
        private String type;
        private String value;
    
        // getter and setter for type and value 
      }
    }
    

    以上内容非常冗长,特别是如果您只对响应的一小部分感兴趣。将响应作为字符串处理然后使用例如JsonPath 只提取您感兴趣的数据。

    【讨论】:

      【解决方案2】:

      您可以使用simple-json.jarJSONObject 中提取该对象

      可下载的 Jar 链接 - simple-json.jar Download Link

      Maven Jar 导入Maven Repository pom syntax

      你的实际对象是

        {
        "head": {
          "status": 200,
          "ok": true,
          "messages": [],
          "errors": [],
          "references": {}
        },
        "body": {
          "id": "d57a9c7aef9842c2e31a0f49c",
          "flowId": "f57979d06f9842c3e94f1f197",
          "creationDate": 1470744494732,
          "path": "/luafanti/test",
          "version": 0,
          "elems": {
            "xxx": {
              "type": "integer",
              "value": 200
            }
          }
        }
      } // hold this complete object in any string reference Variable.
      

      这里我假设String jsonString 拥有完整的 json 对象,如上所述。

      import org.json.simple.parser.JSONParser; 
      import org.json.simple.parser.JSONObject;
      
      // implemetation logic for extracting jsonObject.
      
      private JSONObject extractFirstBlock(String jsonString) throws ......{
      
         JSONObject jsonObj ;
      
         JSONParser parser=new JSONParser();  // parser to parse string to JSONObject
         jsonObj = (JSONObject) parser.parse(jsonString); // parse the Object using parse Method.
        String desiredObject = (String) jsonObj.get("body"); // this Object contains your desired output which you wish to receive.
      
         jsonObj = parser.parse(desiredObject);
         desiredObject = jsonObj.get("elems"); // you will get your desired object as you expected.
      }
      

      desiredObject 中,您将获得 JSONObject 形式的预期值。

       "xxx": {
                  "type": "integer",
                  "value": 200
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-19
        • 2018-05-26
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多