2016-04-12 20 views
1

bir nesne alınamıyor ve ben garip davranışları ile ilgili bir sorun var. Mikroservisler bir nesne listesi döndürürse, tüm öğeleri Listeye göndererek alabilirim.Yani, Şu anda AWS lambda kullanıyorum JSON

{ 
    "payload": [ 
     { 
     "id": 35, 
     "start": { 
     "year": 2016, 
     "month": "OCTOBER", 
     "dayOfMonth": 10, 
     "dayOfWeek": "MONDAY", 
     "era": "CE", 
     "dayOfYear": 284, 
     "leapYear": true, 
     "monthValue": 10, 
     "chronology": { 
      "id": "ISO", 
      "calendarType": "iso8601" 
     } 
     }, 
     "end": { 
     "year": 2016, 
     "month": "OCTOBER", 
     "dayOfMonth": 10, 
     "dayOfWeek": "MONDAY", 
     "era": "CE", 
     "dayOfYear": 284, 
     "leapYear": true, 
     "monthValue": 10, 
     "chronology": { 
      "id": "ISO", 
      "calendarType": "iso8601" 
     } 
     }, 
     "user": "admin" 
    } 
    ] 
} 

ve bu

return (List<Delegation>) response.getBody().getPayload(); 

gibi basit kod Ben bütün liste alıyorum ile:

JSON

. ResponseClass

public class ResponseClass <T> { 

    private T payload; 

    public ResponseClass() { } 

    public void setPayload(T payload) { 
     this.payload = payload; 
    } 

    public T getPayload() { 
     return payload; 
    } 
} 

oldukça basittir ama yükü içinde tek bir nesneyi alıyorum zaman garip şey olur

şimdi JSON:

{ 
    "payload": { 
    "id": 35, 
    "start": { 
     "year": 2016, 
     "month": "OCTOBER", 
     "dayOfMonth": 10, 
     "dayOfWeek": "MONDAY", 
     "era": "CE", 
     "dayOfYear": 284, 
     "leapYear": true, 
     "monthValue": 10, 
     "chronology": { 
     "id": "ISO", 
     "calendarType": "iso8601" 
     } 
    }, 
    "end": { 
     "year": 2016, 
     "month": "OCTOBER", 
     "dayOfMonth": 10, 
     "dayOfWeek": "MONDAY", 
     "era": "CE", 
     "dayOfYear": 284, 
     "leapYear": true, 
     "monthValue": 10, 
     "chronology": { 
     "id": "ISO", 
     "calendarType": "iso8601" 
     } 
    }, 
    "user": "admin" 
    } 
} 

Aynı kesin bir şey (yanında öyle listenin dışında artık) ve bunu aynı yöntemle

(Delegation) response.getBody().getPayload(); 
döküm çalışıyorum ne zaman

benim türüne java.util.LinkedHashMap döküm söyleyerek sınıf dökme istisna alıyorum.

mapper.convertValue(response.getBody().getPayload(), Delegation.class); 

ama

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: Expected array or string. 
at [Source: N/A; line: -1, column: -1] (through reference chain: xxx.Delegation["start"]) 
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216) 
at com.fasterxml.jackson.databind.DeserializationContext.wrongTokenException(DeserializationContext.java:962) 
at xxx.util.JSR310LocalDateDeserializer.deserialize(JSR310LocalDateDeserializer.java:61) 
at xxx.util.JSR310LocalDateDeserializer.deserialize(JSR310LocalDateDeserializer.java:17) 

xxx sadece gizlilik uğruna olduğu hatayı alıyorum:

Ondan sonra kullanıcı Jackson eşleştiricisindeki çalıştı. Jhipster tarafından oluşturulan kodu kullanıyorum.

Heyeti sınıfı

public class Delegation { 

    private Long id; 

    private String user; 

    private LocalDate start; 

    private LocalDate end; 
} 

belirleyiciler ve alıcılar çıkartıldı. Sadece giriş LOCALDATE (java.lang.IllegalArgumentException dönüştürülür mapper.convertValue(input.get("start"), LocalDate.class);

yapmaya çalıştıklarında

aynı hata oluşur: [Kaynak Beklenen dizi veya dize . Beklenmeyen jetonu (START_OBJECT), START_ARRAY beklenen : N/A; satır: -1, sütun: -1])

+1

"T payload" ne tür bir çalışma zamanında bağlı? ResponseClass'ın bir örneği nasıl oluşturulur? –

+0

@Meiko Hey, T yükünü Object yüküne değiştirdim, ancak bu hiçbir şeyi değiştirmiyor. RestTemplate tarafından oluşturulur. ResponseEntity response = template.postForEntity ("son nokta", istek, ResponseClass.class); – user3212350

+1

Sonuçta ortaya çıkan 'java.util.LinkedHashMap' çözümlemesi yapılabilir ('response.getBody() 'den elde edilen getPayload()') ...beklenen yapıya sahip mi? –

cevap

0

İlk JSON'da, payload, bir List dönüştürülecek olan bir dizidir. İkinci JSON'da, payload bir nesnedir. Bunu bir List'a dönüştüremeyeceğiniz bir şahane değildir. Tek bir Object olarak bu nesneyi toplamak gerekiyor ve bir List içinde olmak tercih eğer muhtemelen bir List eklemeden.

+0

eklenmiştir? Onu bir listeye dönüştürmeye çalışmıyorum – user3212350