[英]Spring Custom Object Mapper for non-standard JSON
我正在使用Spring的RestTemplate來啟動一個寧靜的Web服務並獲取非標准JSON。
這是我的意思:
{
...
rules : {
matched : "rule one",
matched : "rule B",
matched : "another rule"
}
...
}
所以基本上我需要將此哈希映射到列表。 在我的pojo中,我希望該字段看起來像這樣:
private List<String> rules; // once parsed, should contain "rule one",
// "rule B", "another rule", etc
到目前為止,這是我嘗試過的。 這是我的序列化器:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class MapValuesToListSerializer extends JsonSerializer<Map<?, ?>> {
@Override
public void serialize(Map<?, ?> map, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
serializerProvider.defaultSerializeValue(map.values(), jsonGenerator);
}
}
在我的POJO中,我這樣注釋了我的領域:
@JsonSerialize(using = MapValuesToListSerializer.class)
private List<String> rules;
這行不通。 標准字段全部正確序列化,但不符合該字段的非標准字段。 我缺少重要的內容,但是我不知道是什么。
盡管我完全同意JB Nizet
所說的話,“如果它是您自己的Web服務之一,請對其進行修復。” 由於存在的力量,這不是我能掌握的。 如果可以的話我會的,否則,但這不取決於我。 (我也沒有個人帶寬來解決此問題,否則將導致任何其他nSize下游問題。)
幸運的是,傑克遜確實提供了執行此操作的工具。
對於領域:
@JsonProperty("rules")
@JsonDeserialize(as = List.class, using = BadmapToListDeserializer.class)
private List<String> rules;
實際的反序列化器:
public class BadmapToListDeserializer extends JsonDeserializer<List<String>> {
@Override
public List<String> deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
List<String> valuesList = new ArrayList<>();
for (JsonToken jsonToken = jsonParser.nextToken(); jsonToken != JsonToken.END_OBJECT; jsonToken = jsonParser.nextToken()) {
if (jsonToken == JsonToken.VALUE_STRING) {
String value = jsonParser.getText();
valuesList.add(value);
}
}
return valuesList;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.