java - org.springframework.web.client.RestClientException 中的错误:java.util.HashMap 没有 HttpMessageConverter
问题描述
我在 org.springframework.web.client.RestClientException 中收到以下错误:使用 rest 模板时 java.util.HashMap 没有 HttpMessageConverter。有谁知道出了什么问题?
使用 java 1.8、spring 5.2.2、commons-logging 1.2。
import java.util.HashMap;
import java.util.Map;
import org.springframework.web.client.RestTemplate;
public class testapi {
private static final String API_BASE_URL = "https://xyz/rest/ng";
private static RestTemplate template = new RestTemplate();
public static void main(String[] args)
throws Exception {
String token = login();
}
private static String login() {
Map<String, Object> payload = new HashMap<>();
payload.put("loginName", "abc.com");
payload.put("password", "xyz");
Map<String, Object> resp = template.postForObject(getUrl("/sessions"), payload, Map.class);
return (String) resp.get("token");
}
}
错误
Exception in thread "main" org.springframework.web.client.RestClientException: No HttpMessageConverter for java.util.HashMap
at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:964)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:740)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:677)
at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:421)
at TestFormApis.login(testapis.java:117)
at TestFormApis.main(testapis.java:61)
解决方案
您RestTemplate
在非 Spring 环境中使用 Spring 的 Web 客户端(至少,您的示例演示了您以标准 Java 方式运行此测试)。
如果您启动一个 Spring 应用程序,它会自行配置大部分配置,包括添加转换器(包中的默认转换器org.springframework.http.converter.*
:ByteArrayHttpMessageConverter、StringHttpMessageConverter、ResourceHttpMessageConverter、AllEncompassingHttpMessageConverter、MappingJackson2XmlHttpMessageConverter、MappingJackson2HttpMessageConverter)。最后一个 - 对于您的情况,RestTemplate 使用内部杰克逊进行转换。
因此,如果您想使用您的示例,只需添加特定的转换器。
更简单的方法 - 添加杰克逊库并手动转换:
var mapper = ObjectMapper();
var strPayload = mapper.writeValueAsString(payload);
并strPayload
在RestTempate
通话中使用。
或者只是将您的应用程序作为 Spring 应用程序启动。
推荐阅读
- javascript - 如何在前端 javascript 上接收通过 post 请求提交的表单数据
- flutter - 在调试视图中运行应用程序时,您是否可以单击代码中的组件并在应用程序中突出显示它(反之亦然)?
- acumatica - Acumatica:在同一 DAC 字段上切换选择器属性
- javascript - 如何处理通过向无效 URL 发出 XMLHttpRequest 引发的 404 错误?
- scanf - c中的char数组在溢出的scanf操作中
- javascript - 使用 HTML 和 javascript 猜数字游戏
- r - 当尝试在 RStudio 中编织时,它会在 tex 文件中写入一个连字并且无法编译它
- r - 尽管遵循指示,但无法让 R 为课程加载
- javascript - 从逗号分隔的 Eval 中获取所有值
- c++ - 指向抽象类的指针数组:指向 nullptr 或不指向 nullptr (C++)