使用 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;
}
我正在尝试将 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;
}