使用 RestTemplate 在 Spring 中进行复杂的 Json 映射

Complex Json Mapping in Spring with RestTemplate

我正在尝试将 json响应映射到我的 Java 实体 class。 json 响应如下所示

   "classResults":{
      "classSuggestion":[
          "classA",
          {
            "section":"section c"
          }
      ]
    }
    

我的 Java Class 映射可能看起来像这样。我将有一个 ClassSuggestion 对象,以便映射 classSuggestion 对象。但是,class建议如何保存上述 json 数据?

public class ClassResults {

   ClassSuggestion classSuggestion

}

我的Class建议如何?

public class ClassSuggestion {

   String classes
   String section
}

如何将其映射到 Java Class 或数据类型?

@Data // lombok
public class ClassResults {
   private List<ClassSuggestion> classSuggestion; // mapped from array
}

@Data
@NoArgsConstructor
public class ClassSuggestion {
   private String classes;
   private String section;
   public ClassSuggestion(String classes) {
     this.classes = classes; //Handle string "classA"
   }
}

我通过编写自定义解串器解决了这个问题:

class ClassSuggestionDeserializer extends StdDeserializer<Employee> {

   @Override
   public Map<String, String> deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
      ObjectCodec codec = jp.getCodec();
      TreeNode node = codec.readTree(jp);
      JsonNode classResults = node.get("classResults");
      // and finally iterating through the classResults to get string values
   }
}

同时在数据 class 上,使用自定义反序列化器使用 JsonDeserialize。

@JsonDeserialize(using=ClassSuggestionDeserializer.class)
public class ClassSuggestion {

   Map<String, String> classResults;

 }