使用以下GET请求:
{"userRegistrations":[{"userRegistrationToken":"fb398972","userRegistrationTokenAlias":"87f15f8"}]}
返回一个像这样的JSON字符串:
ResponseEntity<UserRegistrations> entity = restTemplate.exchange(uri, HttpMethod.GET, requestEntity, UserRegistrations.class );
entity.getBody();
但我想用一个没有字符串的对象来完成这个工作。因此,使用下面的代码,我收到一个UserRegistrations对象,其中包含一个null UserTokenResponse List
public class UserRegistrations {
List<UserTokenResponse> userRegistrationList;
//..getters and setters
}
public class UserTokenResponse {
private String userRegistrationToken;
private String userRegistrationTokenAlias;
//getters and setters
}
我的域类看起来像这样:
{{1}}
我错过了什么?
答案 0 :(得分:2)
假设您正在使用Jackson,RestTemplate
会自动注册一个MappingJackson2HttpMessageConverter
,用于配置基础ObjectMapper
以忽略未知属性。
JSON对象有一个名为userRegistrations
的属性,而您的Java类有一个名为userRegistrationList
的属性。他们不匹配。
他们需要匹配,或者您需要添加属性的@JsonProperty
注释,以使Jackson序列化/解析为userRegistrations
。
答案 1 :(得分:0)
当您的类属性名称与响应中出现的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与类中的名称回调不匹配。
但是如果您的班级如下
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 + "]";
}
}
然后您将在响应实体中获得预期的响应
答案 2 :(得分:0)
我遇到了类似的错误,它也返回null。当将Object.class替换为我们要在客户端上转换的类的名称时,问题就解决了。
喜欢:
Token = restTemplate.exchange(uri, HttpMethod.POST, request, Object.class);
问题可能是由于它与我们要转换的类不直接兼容。