java - 使用 RestTemplate 时出错 - 使用 Apache Commons Multimap 反序列化对象的问题
问题描述
我正在尝试使用服务中的 RestTemplate 对象进行检索。
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<BusinessPartnerRequest> entity = new HttpEntity<>(request, headers);
ResponseEntity<Analysis> result = restTemplate.exchange(url, HttpMethod.POST, entity, Analysis.class);
不幸的是,我每次都遇到异常。这是一个例外:
无法提取响应:没有找到适合响应类型 [class com.abb.bttr.validator.Analysis] 和内容类型 [application/json;charset=UTF-8] 的 HttpMessageConverter
我知道这是一般异常,每次出现异常时映射器都会返回它。
所以我找到了真正的原因:找不到非具体 Map 类型的反序列化器 [map type; 类 org.apache.commons.collections4.MultiMap,[简单类型,类 java.lang.String] -> [简单类型,类 java.lang.Object]]
我的分析对象:
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.MapSerializer;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import org.apache.commons.collections4.MultiMap;
import org.apache.commons.collections4.map.MultiValueMap;
@JacksonXmlRootElement
public class Analysis {
private Boolean error = false;
@JsonSerialize(keyUsing = MapSerializer.class)
private MultiMap<String, String> errorDetails = new MultiValueMap<>();
//getter, setters, constructors, equals and hashcode
}
你知道一种快速反序列化 ApacheCommons MultiMap 的方法吗?我可以使用番石榴,但我不想仅为 Multimap 添加番石榴库。
解决方案
代替 Apache conman APP,您可以使用 Spring 谓词映射。如下所示导入语言。
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
并使用如下所示的多地图。
MultiValueMap<String, Integer> multiValueMap=new LinkedMultiValueMap<>();
推荐阅读
- reactjs - React Component:更新组件,基于另一个没有关系的组件
- angular - 用字符串修补值
- spring - 如何将标头添加到 URI
- puppeteer - 为什么 puppeteer 向我显示 DOMEXCEPTION :“无法在“文档”上执行 'querySelector'?
- javascript - Node js在完成多行代码之前执行函数
- selenium - 如何执行相同的黄瓜功能或场景 n 次?
- javascript - 箭头函数中的Expo Sound
- angular - 在 Angular 中使用 promise 块之外的变量
- java - 创建用户可以向另一个用户发送请求以进行个人聊天的活动
- c# - 尝试从 csv 文件生成 excel 时参数计数不匹配