如何使用rest模板Spring使用Google guava多地图数据发送post请求?
我有一张多重地图。当我尝试使用restTemplate将数据从前端服务器发送到后端服务器时,它会返回一个“500内部服务器错误”错误代码。它适用于java.util.Map类中的法线映射。我如何配置restTemplate,以便发送Google guava multimap数据 这是我在spring boot中的前端服务器代码如何使用rest模板Spring使用Google guava多地图数据发送post请求?,spring,spring-boot,spring-mvc,resttemplate,multimap,Spring,Spring Boot,Spring Mvc,Resttemplate,Multimap,我有一张多重地图。当我尝试使用restTemplate将数据从前端服务器发送到后端服务器时,它会返回一个“500内部服务器错误”错误代码。它适用于java.util.Map类中的法线映射。我如何配置restTemplate,以便发送Google guava multimap数据 这是我在spring boot中的前端服务器代码 import com.google.common.collect.Multimap; ... try
import com.google.common.collect.Multimap;
...
try
{
RestTemplate rt = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
List<MediaType> acceptList = new ArrayList<>();
acceptList.add(MediaType.APPLICATION_JSON);
headers.setAccept(acceptList);
Multimap<String, byte[]> arrayMap = ArrayListMultimap.create();
arrayMap.put("test", "hello".getBytes());
arrayMap.put("title", "meow".getBytes());
arrayMap.put("body", "A powerful tool for building web apps.".getBytes());
HttpEntity<Multimap<String, byte[]>> uploadEntity = new HttpEntity<>(arrayMap, headers);
ResponseEntity<String> response = rt.postForEntity(uri, uploadEntity, String.class);
System.out.println(response);
}
catch (HttpClientErrorException e)
{
/**
*
* If we get a HTTP Exception display the error message
*/
logger.error("error http client: " + e.getResponseBodyAsString());
}
catch(Exception e)
{
logger.error("error: " + e.getMessage());
}
import com.google.common.collect.Multimap;
...
尝试
{
RestTemplate rt=新的RestTemplate();
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
List acceptList=新的ArrayList();
acceptList.add(MediaType.APPLICATION_JSON);
headers.setAccept(acceptList);
Multimap arrayMap=ArrayListMultimap.create();
put(“test”,“hello”.getBytes());
arrayMap.put(“title”,“meow.getBytes());
put(“body”,“构建web应用程序的强大工具。”.getBytes());
HttpEntity uploadEntity=新的HttpEntity(数组映射,标题);
ResponseEntity response=rt.postForEntity(uri、uploadEntity、String.class);
System.out.println(响应);
}
捕获(HttpClientErrorE异常)
{
/**
*
*如果出现HTTP异常,则显示错误消息
*/
error(“错误http客户端:+e.getResponseBodyAsString());
}
捕获(例外e)
{
logger.error(“错误:+e.getMessage());
}
这是我的后端服务器控制器,它接收来自前端服务器的传入数据
import com.google.common.collect.Multimap;
...
@PostMapping(path="/rh2lev", consumes = "application/json", produces = "application/json")
public String setup(@RequestBody Multimap<String, byte[]> uploadIndex)
{
System.out.println(uploadIndex);
return "everything ok";
}
import com.google.common.collect.Multimap;
...
@PostMapping(path=“/rh2lev”,consumes=“application/json”,products=“application/json”)
公共字符串设置(@RequestBody Multimap uploadIndex)
{
System.out.println(上传索引);
返回“一切正常”;
}
将Multimap
对象序列化为JSON字符串或将JSON字符串反序列化为Multimap
对象时,似乎会发生此错误。Spring通常使用JacksonObjectMapper
进行JSON序列化/反序列化。默认情况下,JacksonObjectMapper
可以对java.util.Map
对象进行JSON序列化/反序列化,但不能com.google.common.collect.Multimap
对象。因此,您需要在“前端服务器”中配置自定义序列化程序,并在“后端服务器”中配置自定义反序列化程序。我认为您可以通过使用来实现这一点。
示例 “前端服务器”和“后端服务器”的配置
(pom.xml) 相关问题
了解更多信息
将
Multimap
对象序列化为JSON字符串或将JSON字符串反序列化为Multimap
对象时,似乎会发生此错误。Spring通常使用JacksonObjectMapper
进行JSON序列化/反序列化。默认情况下,JacksonObjectMapper
可以对java.util.Map
对象进行JSON序列化/反序列化,但不能com.google.common.collect.Multimap
对象。因此,您需要在“前端服务器”中配置自定义序列化程序,并在“后端服务器”中配置自定义反序列化程序。我认为您可以通过使用来实现这一点。
示例 “前端服务器”和“后端服务器”的配置
(pom.xml) 相关问题
了解更多信息
500内部服务器错误
表示服务器遇到意外情况()。所以,首先你必须检查你的“后端服务器”是否可以处理你的“加密数据”。我想你是对的,但我不确定后端服务器需要做哪些更改。出于某种原因,它适用于普通java map数据类型,但不适用于google guava multimap:(500内部服务器错误
表示服务器遇到意外情况()。因此,首先您必须检查您的“后端服务器”是否可以处理您的“加密数据”。我想您是对的,但我不确定后端服务器需要做哪些更改。出于某些原因,它适用于普通java map数据类型,但不适用于google guava multimap:(
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
</dependency>
@Configuration
public class MyConfigurer {
@Bean
public Jackson2ObjectMapperBuilderCustomizer guavaModuleCustomizer() {
return builder -> {
builder.modules(new GuavaModule());
};
}
}