私は現在AWSラムダを使用していますが、私は奇妙な動作に問題があります。 microservicesがオブジェクトのリストを返す場合、すべてのアイテムをListにキャストして取得できます。JSONからオブジェクトを取得できません
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"
}
]
}
この
return (List<Delegation>) response.getBody().getPayload();
のような単純なコードで、私は全体のリストを取得しています。 ResponseClassは
public class ResponseClass <T> {
private T payload;
public ResponseClass() { }
public void setPayload(T payload) {
this.payload = payload;
}
public T getPayload() {
return payload;
}
}
非常に単純ですが、私はペイロードに単一のオブジェクトを受信していたときに奇妙なことが起こります
ので、今 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"
}
}
まったく同じもの(その横にあること現在はリストにない) と同じ方法でキャストしようとしているとき
(Delegation) response.getBody().getPayload();
クラスキャスト例外が発生しました。私のタイプにjava.util.LinkedHashMap
をキャストできません。
だから、私は、ユーザージャクソンマッパーに試してみました:
mapper.convertValue(response.getBody().getPayload(), Delegation.class);
が、私は
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
エラーを受けてるだけでプライバシーのためです。 jhipsterによって生成されたコードを使用しています。省略
委任クラス
public class Delegation {
private Long id;
private String user;
private LocalDate start;
private LocalDate end;
}
セッターとゲッター。
私はちょうど入力がLOCALDATE(java.lang.IllegalArgumentExceptionが変換され mapper.convertValue(input.get("start"), LocalDate.class);
やるしようとすると、同じエラーが発生します。予期しないトークン(START_OBJECT)は、START_ARRAY予想:予想される配列や文字列を [ソースで:N/A;行:-1、列:-1])
実行時にタイプがバインドされている「Tペイロード」とは何ですか? 'ResponseClass'のインスタンスはどのように作成されますか? –
@Meikoねえ、TペイロードをObjectペイロードに切り替えましたが、何も変わりません。 RestTemplateによって作成されます。 ResponseEntityレスポンス= template.postForEntity( "エンドポイント"、リクエスト、ResponseClass.class); –
user3212350
結果の 'java.util.LinkedHashMap'(' response.getBody()。getPayload() 'の結果)を分析できますか?それは期待された構造を持っていますか? –