我正在使用 Spring 的 RestTemplate 发送/接收 http 请求。我正在使用 Spring HttpEntity 创建 http 请求。我使用 HttpConverters 来序列化 http 请求中的应用程序对象,反之亦然。根据Spring docs,有 4 个默认转换器:
- ByteArrayHttpMessageConverter,
- StringHttpMessageConverter,
- FormHttpMessageConverter,
- SourceHttpMessage 转换器。
我FormHttpMessageConverter
用来序列化字符串中的几个属性值对,以便可以使用RestTemplate
. 但是,FormHttpMessageConverter
要求 http 请求参数值为 a MultiValueMap
,因此,我需要为每个属性值对执行此操作:
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
final MultiValueMap<String, String> postParams = new LinkedMultiValueMap<String, String>();
String attrib1[] = new String[]{"value1"};
postParams.put("attrib1", Arrays.asList(attrib1));
我想使用一个更简单的方法HttpMessageConverter
,它可以为每个参数接受一个简单的地图。就像是:
final HashMap<String, String> postParams = new HashMap<String, String>();
postParams.put("exclusiveOnly", "value1");
我知道前一种形式更通用,但我认为后者对很多应用程序都很有用,所以我想知道为什么它不是HttpConverter
Spring 中的默认值。无论如何,你能给我提示或点链接如何创建一个自定义HttpConverter
来实现我想要的吗?