我试图在春季通过rest调用来调用第三方api。目前,我正在使用postforobject。我将请求类转换为字符串并为对象调用post.And响应被视为字符串,然后将其转换为类。用以下参数定义了类
Class responseDto {
private Arraylist < Response > response;
getResponse();
setResponse();
}
Response {
String code;
String trid;
Getters();
Setters();
}
我正在使用Jackson依赖项进行序列化和反序列化。 此类对于以下响应正常运行
{
"response":[
{
"code":"100",
"trid":"123"
}
]
}
但是在错误情况下,其余的将返回一个名称为“ response”的json类,如下所示
{
"response":{
"code":"700",
"trid":"123"
}
}
并且我用某个json映射异常定义的类的反序列化失败(com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT令牌中反序列化java.util.ArrayList的实例)。那么如何解决这个问题在Java spring中。
答案 0 :(得分:0)
解决方案1:使用@JsonFormat(> 2.6版本)
只需使用@JsonFormat标记为
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonFormat.Feature;
public class ResponseDto {
@JsonFormat(with = Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
private List<Response> response;
public List<Response> getResponse() {
return response;
}
public void setResponse(List<Response> response) {
this.response = response;
}
}
解决方案2:设置反序列化功能
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
// global setting, can be overridden using @JsonFormat in beans
// when using @JsonFormat on fields, then this is not needed
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
ResponseDto dto = mapper.readValue(stringResponse, ResponseDto.class);
}
现在json中包含单个对象,单个对象数组,多个对象数组的response
节点将被成功解析为Response
对象的列表。