以下のGETリクエストで:
ResponseEntity<String> entity = restTemplate.exchange(uri, HttpMethod.GET, requestEntity, String.class );
entity.getBody();
次のようなJSON文字列を返します。
{"userRegistrations":[{"userRegistrationToken":"fb398972","userRegistrationTokenAlias":"87f15f8"}]}
しかし、私はこれを文字列ではなくオブジェクトで機能させたいと思っています。したがって、以下のコードを使用すると、UserTokenResponseリストがnullのUserRegistrationsオブジェクトを受け取ります。
ResponseEntity<UserRegistrations> entity = restTemplate.exchange(uri, HttpMethod.GET, requestEntity, UserRegistrations.class );
entity.getBody();
そして、私のドメインクラスは次のようになります。
public class UserRegistrations {
List<UserTokenResponse> userRegistrationList;
//..getters and setters
}
public class UserTokenResponse {
private String userRegistrationToken;
private String userRegistrationTokenAlias;
//getters and setters
}
何が足りないのですか?
Jacksonを使用しているとすると、RestTemplate
は自動的にMappingJackson2HttpMessageConverter
を登録し、不明なプロパティを無視するように基になるObjectMapper
を構成します。
JSONオブジェクトにはuserRegistrations
という名前の単一の属性がありますが、JavaクラスにはuserRegistrationList
という名前の単一の属性があります。これらは一致しません。
それらは一致する必要があります。または、属性の@JsonProperty
アノテーションを追加して、Jacksonが属性をuserRegistrations
としてシリアル化/解析するようにする必要があります。
これは、クラスのプロパティ名が応答に含まれるJSONプロパティ名と一致しない場合に発生します。たとえば、以下の例を見てください
public class ScheduledCallbacks {
private List<Callback> callbacks;
public List<Callback> getCallbacks() {
return callbacks;
}
public void setCallbacks(List<Callback> callbacks) {
this.callbacks = callbacks;
}
@Override
public String toString() {
return "ScheduledCallbacks [callbacks=" + callbacks + "]";
}
}
応答が次の場合
{
"scheduledCallbacks": [
{
"sessionId": "string",
"customerNbr": "string",
"topicName": "string",
"desiredTime": "string",
"callbackState": "string",
"serviceName": "string",
"expirationTime": "string",
"programCode": "string"
}
]
}
次に、JSON応答の名前scheduledCallbacksがクラスの名前コールバックと一致しないため、null応答が返されます。
ただし、クラスが次の場合
public class ScheduledCallbacks {
private List<Callback> scheduledCallbacks;
public List<Callback> getScheduledCallbacks() {
return scheduledCallbacks;
}
public void setScheduledCallbacks(List<Callback> scheduledCallbacks) {
this.scheduledCallbacks = scheduledCallbacks;
}
@Override
public String toString() {
return "ScheduledCallbacks [scheduledCallbacks=" + scheduledCallbacks + "]";
}
}
次に、応答エンティティで期待される応答を取得します