我正在尝试对API测试进行restTemplate调用。返回的json是嵌套的,具有多个级别。
{
"code": 200,
"data": {
"result": {
"publicId": "xyz"
}
}
}
我有以下类作为包装器:
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public abstract class RestCallResponse<T> {
private int code;
protected RestCallResponse(int code) {
this.code = code;
}
protected RestCallResponse(){}
@JsonProperty("data")
public Map<?, ?> getRestCallResponse() {
return ImmutableMap.of("result", getResult());
}
@JsonIgnore
protected abstract T getResult();
public int getCode() {
return code;
}
}
然后是一个扩展这个抽象类的SuccessRestResponse
类:
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE)
public class SuccessRestResponse<T> extends RestCallResponse<T> {
@JsonProperty("result")
private T result;
public SuccessRestResponse() {
}
public SuccessRestResponse(T result) {
super(HttpStatus.SC_OK);
this.result = result;
}
protected T getResult() {
return this.result;
}
}
然后我终于得到了实际数据POJO:
public final class CreatedResponse {
@JsonProperty
private final EntityId publicId;
public CreateCreativeResponse(EntityId publicId) {
this.publicId = publicId;
}
}
在测试案例中,我正在打电话:
ResponseEntity<SuccessRestResponse<CreatedResponse>> newResponse =
restTemplate.exchange(requestEntity, new ParameterizedTypeReference<SuccessRestResponse<CreatedResponse>>() {});
但是我收到以下错误:
nested exception is org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: null value in entry: result=null (through reference chain: com.inmobi.helix.test.api.dao.SuccessRestResponse["data"]);
有什么建议吗?我哪里错了?
答案 0 :(得分:0)
我通过解决方法解决了这个问题。尽管如此,仍然不知道上面的代码有什么问题。
我摆脱了课程RestCallResponse<T>
并编辑了SuccessRestResponse<T>
中的字段成员,看起来像这样:
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class SuccessRestResponse<T> {
private int code;
private Map<String, T> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public Map<String, T> getData() {
return data;
}
@JsonIgnore
public T getResult() {
return data.get("result");
}
public void setData(Map<String, T> data) {
this.data = data;
}
}
这对应于反序列化时嵌套的json。
P.S。 - 仍然想知道上面的代码出了什么问题 虽然。因为,为什么班级等级不适合我。