私は穏やかなWebサービスをヒットし、非標準のJSONを取り戻すために、SpringのRestTemplateを使用しています。標準以外のJSONのカスタムカスタムオブジェクトMapper
{
...
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;
。標準フィールドはすべて正しくシリアル化されますが、このフィールドに準拠している非標準フィールドは正しくシリアル化されません。私はこれに重要な部分を欠いているが、私は何がわからない。
"非標準JSON" のようなものはありません。それはJSONかそうでないかのどちらかです。それは本当にあなたがウェブサービスから得ているものですか?まったくのことではありません。識別子は引用されていません。それがジャクソンと解析可能であったとしても、私はカスタム**シリアライザ**が**デシリアライズ**をどのように助けるか分かりません。 –
代替手段として何をお勧めしますか?私はこのデータを一方的に変える必要があり、ジャクソンはこれを部分的に読んでいるので、それを出発点として使用することは合理的な仮定のようです。 –
私はJSONを返すはずのWebサービスには依存しませんが、そうではありません。それがあなたのWebサービスの1つであれば、修正してください。そうでない場合は、Webサービスプロバイダに、有効なJSONを返すようにWSを修正するか、独自の独自の形式、または少なくともその独自の形式の仕様を解析できるパーサーを用意するよう依頼してください。 –