如何使用rest模板Spring使用Google guava多地图数据发送post请求?

如何使用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

我有一张多重地图。当我尝试使用restTemplate将数据从前端服务器发送到后端服务器时,它会返回一个“500内部服务器错误”错误代码。它适用于java.util.Map类中的法线映射。我如何配置restTemplate,以便发送Google guava multimap数据

这是我在spring boot中的前端服务器代码

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通常使用Jackson
ObjectMapper
进行JSON序列化/反序列化。默认情况下,Jackson
ObjectMapper
可以对
java.util.Map
对象进行JSON序列化/反序列化,但不能
com.google.common.collect.Multimap
对象。

因此,您需要在“前端服务器”中配置自定义序列化程序,并在“后端服务器”中配置自定义反序列化程序。我认为您可以通过使用来实现这一点。

示例

“前端服务器”和“后端服务器”的配置

(pom.xml)

相关问题



了解更多信息






Multimap
对象序列化为JSON字符串或将JSON字符串反序列化为
Multimap
对象时,似乎会发生此错误。Spring通常使用Jackson
ObjectMapper
进行JSON序列化/反序列化。默认情况下,Jackson
ObjectMapper
可以对
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());
        };
    }
}