【问题标题】:Map json object to java object (but my json object variables has first letter capital)将 json 对象映射到 java 对象(但我的 json 对象变量的首字母大写)
【发布时间】:2022-01-17 02:26:22
【问题描述】:

我有一个第三方 API,它以 JSON 对象的形式提供响应,其变量的首字母大写 我的 JSON 对象如下所示:

{
   "ApiStatus":{
      "ApiStatusCode":5000,
      "ApiMessage":"OK",
      "FWStatusCode":0,
      "FWMessage":""
   },
   "Encounter":{
      "EncounterId":"hgasfdjsdgkf",
      "ApiLinks":[
         {
            "Title":"Self",
            "Description":"Self referencing api",
            "ResourceName":"self",
            "HttpMethods":[
               "GET",
               "DELETE"
            ],
            "URL":"http://www.google.com/api/v2/test/test2/hchvjh"
         },
         {
            "Title":"Transmit a Report",
            "Description":"Create a report and transmit it.",
            "ResourceName":"transmitter",
            "HttpMethods":[
               "POST"
            ],
            "URL":"http://www.google.com/api/v2/test3/test3/jydgfkshd/transmitter"
         }
      ]
   }
}

正如您在上面看到的变量的第一个字母是大写的,需要在我的 java 对象类中映射它,所以当我尝试使用 ObjectMapper 时,它不起作用。

MyJavaObject object = new ObjectMapper().readValue(jsonObject, MyJavaObject.class);

任何建议或帮助都会很棒。

【问题讨论】:

    标签: java spring-boot spring-mvc jackson objectmapper


    【解决方案1】:

    您需要将Jackson的默认命名策略设置为UpperCamelCaseStrategy,如下:

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UpperCamelCaseStrategy);
    MyJavaObject object = objectMapper.readValue(jsonObject, MyJavaObject.class);
    

    对于属性URLFWStatusCodeFWMessage,它们不遵循驼峰式、蛇式或任何其他命名策略,您需要在类属性上使用@JsonProperty,以便Jackson 知道如何处理它们。只需使用相应的 @JsonProperty 注释类属性,它就会起作用:

    • @JsonProperty("URL")
    • @JsonProperty("FWStatusCode")
    • @JsonProperty("FWMessage")

    【讨论】:

    • 使用了你的代码 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.UPPER_CAMEL_CASE); MyJavaObject 对象 = objectMapper.readValue(response, MyJavaObject.class);除 URL 和 FWStatusCode 和 FWMessage 外,所有变量都已映射。我做对了吗,还是需要进行任何其他更改。
    • 我没有注意到这 3 个。对于它们,您需要在类属性上使用 @JsonProperty 以便杰克逊知道如何处理它们。原因是他们不遵循骆驼案、蛇案或任何其他命名策略。在相应的类属性上使用@JsonProperty("URL")@JsonProperty("FWStatusCode")@JsonProperty("FWMessage"),它将起作用。
    • 谢谢它的工作。
    • 太棒了!很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2019-05-27
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多