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
. ResponseClasspublic 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])
"T payload" ne tür bir çalışma zamanında bağlı? ResponseClass'ın bir örneği nasıl oluşturulur? –
@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
Sonuçta ortaya çıkan 'java.util.LinkedHashMap' çözümlemesi yapılabilir ('response.getBody() 'den elde edilen getPayload()') ...beklenen yapıya sahip mi? –