に基づいてどのように私の名前を変更することができます動物が犬であれば「動物」を「犬」に、エーゲルであれば「イーグル」に、設定JSONのプロパティ名が、私はこのようなコードを持っているクラス
試験: 私の最高の推測では、このようなインタフェースクラスでこれを設定することです:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "animal")
@JsonSubTypes({
@Type(value = Dog.class, name = "dog")
@Type(value = Eagel.class, name = "eagel")
public interface Animal {}
しかし、それは仕事を得る傾けます。また、DogとEagelに@JsonRootNameを使用しようとしましたが、何の結果もありませんでした。これを動作させるために@JsonSubTypesを使用するはずですか? @JsonSubTypesでプロパティを追加するだけで、既存のプロパティを変更することはできません。 jacksonを使って2.7。
mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
編集:最小完全な例を:私のJSONマッパーもに設定されている
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonNaming {
interface Animal {}
class Dog implements Animal {
private String tag = "ABC";
public Dog() {}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
}
class World {
@JsonSubTypes(@Type(value = Dog.class, name = "dog"))
private Animal animal;
public World() {}
public Animal getAnimal() {
return animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
}
public JsonNaming() {
World world = new World();
world.setAnimal(new Dog());
try {
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(world);
System.out.println(json);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new JsonNaming();
}
}
結果:{ "動物":{ "タグ": "ABC"}}
目標:{ "犬":{ "タグ": "ABC"}}
ここでスペルナジー:イーグルではなく、Eagel :-) –
プロパティ名を設定するフィールドに@JsonProperty( "key_name")アノテーションを使用 –