Jackson json kütüphanesiyle, @JsonCreator
kullanımıyla nesnenin seri hale getirilmesi mümkündür ve aşağıdaki gibi giriş jsonunu temsil eden "üst düzey" harita verilir:@JacksonInject with En üst düzey bir harita üzerinde @JsonCreator kullanın
{
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
01:
class MyClass {
final int field;
public MyClass(int theInt) {
this.field = theInt;
}
@JsonCreator
static MyClass create(Map<String, Object> map) {
return new MyClass((int) map.get("theInt"));
}
}
önceki örnekler json aşağıdaki giriş tür işleyebilir:
class MyClass {
final int field;
@JsonCreator
public MyClass(Map<String, Object> map) {
this.field = (int) map.get("theInt");
}
}
hatta statik fabrika yöntemi
Bu özellikle benim durumumda kullanışlıdır çünkü bilmediğim bir yapıyı bir json'u kaldırmak istiyorum. "Üst düzey harita" dediğim şeye erişim vermek işleri kolaylaştırıyor.
Nesnelerimi, bu özelliğe izin vermeyen @JsonAnySetter
ve özellik adını bilmediğim @JsonProperty
kullanmak yerine, değiştirilemeyen nesneler oluşturulmasına olanak sağladığından bu şekilde ayırmak istiyorum. önceden bahsettiğim gibi önceden.
@JacksonInject
kullanımı ve
ObjectMapper
üzerinde
withInjectableValues(InjectableValues)
bir çağrı yoluyla buna izin verir. Sonunda
Bu I kullanmak istiyorum kod türü: Maalesef
class MyClass {
final MyField[] myFields;
public MyClass(MyField... myFields) {
this.myFields = myFields;
}
@JsonCreator
static MyClass create(@JacksonInject("conf") Conf conf, Map<String, Object> map) {
MyFields[] myFields;
// initialize myFields (or any other object) based on the content of map
// and also make use of the inject conf
return new MyClass(myFields);
}
}
Jackson istisnalar aşağıdaki tür atar: yapıcı hile çalışırken
JsonMappingException: Argument #1 of constructor [constructor for MyClass, annotations: {[email protected]()}] has no property name annotation; must have name when multiple-paramater constructor annotated as Creator
- kimse ben sorunu nasıl çözebileceklerini biliyor mu
JsonMappingException: Argument #1 of factory method [method create, annotations: {[email protected]()}] has no property name annotation; must have when multiple-paramater static method annotated as Creator
fabrika yöntemine hile çalışıyor?
- üst düzey haritasına erişim
- değişmez bir nesne oluşturmak için (peşin json özellik adlarını bilmiyorum) (şimdiye olamaz: gereklerini Özetle
, ihtiyacım
şöyle json giriş biçimini değiştiremez @JsonCreator
dekore yapıcı veya fabrika yöntemine bazı conf enjekte etmek) @JsonAnySetter
kullanın:
{
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
Bu bilinen bir sorundur edilir
[DÜZENLE]: http://jira.codehaus.org/browse/JACKSON-711 (henüz sabit değil)
Gerçekten de bu bileti öğrendim: http://jira.codehaus.org/browse/JACKSON-711 – killy971
Ah evet. Bunun için oy verdiğinizden emin olun - dediğim gibi işe yarayacaktır, ancak maalesef sadece uygulama yönlerinden dolayı destekleyici zorlayıcı kombinasyonlardan biridir. – StaxMan