2015-05-17 37 views
5

REST API'si oluşturmak için dropwizard kullanıyorum. Ama anlamıyorum, Jackson'ı WRAP_ROOT_VALUE/UNWRAP_ROOT_VALUE özelliklerinden bazı sınıfları dışlamak için nasıl yapılandırabilirim?Json kök öğesini yalnızca bazı sınıflar için kullanın

{ 
    "identification": "dummyuser", 
    "password":"dummypass" 
} 

Bu java sınıf LoginRequest eşleşmelidir:

public class LoginRequest { 
    public String identidication; 
    public String passwrd; 
} 

Ben de dahil bazı türleri için istekler alıyoruz Şu anda kök öğe adını içermez json gövdeli bir post isteği olsun kök öğesi adı:

:

{ 
    "user":{ 
     "id":12345, 
     "name":"John Doe" 
    } 
} 

Bu aktarılması gerektiğini

environment.getObjectMapper().configure(SerializationFeature.WRAP_ROOT_VALUE, true); 
environment.getObjectMapper().configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true); 

ama şimdi her sınıflar için geçerlidir:

210 Ben dahil etmek zorunda çalışma kök öğeyi almak için. Bu, giriş talebi geldiğinde, sunucu, kök öğe adını görmeyi beklediği için bir hata atacağı anlamına gelir.

+0

Bunu çözebildiniz mi? –

cevap

0

kullanımı JsonTypeInfo yerine JsonRootName ile JsonTypeName: açıklamalı sınıf oldukça mantıklı adı bağlanması için kullanılan

@JsonTypeName("user") 
@JsonTypeInfo(include= JsonTypeInfo.As.WRAPPER_OBJECT,use= JsonTypeInfo.Id.NAME) 
public class User { 
    ... 
} 

@JsonTypeName

ek açıklama. JsonTypeInfo ile (ve özellikle onun JsonTypeInfo.use() özelliği), tür adları ve türleri arasındaki ilişkiyi kurmak için kullanılır. tür bilgileri JSON serileştirme ve serisini kaldırma ile nasıl kullanıldığı takdirde ve ayrıntılarını yapılandırmak için kullanılan

@JsonTypeInfo

Ek Açıklama, Object örneklerinin gerçek sınıfının hakkında bilgi korumak için. Bu mutlaka polimorfik tipler içindir ve ayrıca soyut beyan edilen tiplerin bağlanması ve somut uygulamanın eşleştirilmesi için gerekli olabilir.