2025年resttemplate post请求发送body_java发送post请求

resttemplate post请求发送body_java发送post请求当使用 RestTemplate 进行 http 请求时 的确很方便 但是当需要进行 post 请求时遇到了坑 1POST 传递参数 采用 LinkedMultiV 不能使用 HashMap String url http posturl MultiValueMa map new LinkedMultiV map add shopid

当使用RestTemplate进行http请求时,的确很方便,但是当需要进行post请求时遇到了坑

1POST传递参数 :采用 LinkedMultiValueMap ,不能使用HashMap

String url = 'http://posturl';
MultiValueMap map= new LinkedMultiValueMap();
map.add("shopid","1");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity> request = new HttpEntity>(map, headers);
return restTemplate.postForEntity(url, request,String.class);

注意 上面的请求支持参数类型均为String类型,如果MultiValueMap LinkedMultiValueMap 会将value放进list中,key –> [value]

2 采用JSONObject或者实体类传递参数

        RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());

JSONObject param = new JSONObject();
param.put("username", "123");

HttpEntity formEntity = new HttpEntity(param.toString(), headers);

String result = restTemplate.postForObject(url, formEntity, String.class);

使用这种方式可以传递任意类型的参数,避免上面的情况

总结,遇到这种问题时多看看源码会很有帮助。

public class LinkedMultiValueMap implements MultiValueMap, Serializable, Cloneable {
private static final long serialVersionUID = 3801124242820219131L;
private final Map> targetMap;

public LinkedMultiValueMap() {
this.targetMap = new LinkedHashMap();
}

public LinkedMultiValueMap(int initialCapacity) {
this.targetMap = new LinkedHashMap(initialCapacity);
}

public LinkedMultiValueMap(Map> otherMap) {
this.targetMap = new LinkedHashMap(otherMap);
}

@Nullable
public V getFirst(K key) {
List values = (List)this.targetMap.get(key);
return values != null && !values.isEmpty() ? values.get(0) : null;
}

public void add(K key, @Nullable V value) {
List values = (List)this.targetMap.computeIfAbsent(key, (k) -> {
return new LinkedList();
});
values.add(value);
}

public void addAll(K key, List values) {
List currentValues = (List)this.targetMap.computeIfAbsent(key, (k) -> {
return new LinkedList();
});
currentValues.addAll(values);
}

public void addAll(MultiValueMap values) {
Iterator var2 = values.entrySet().iterator();

while(var2.hasNext()) {
Entry> entry = (Entry)var2.next();
this.addAll(entry.getKey(), (List)entry.getValue());
}

}

public void set(K key, @Nullable V value) {
List values = new LinkedList();
values.add(value);
this.targetMap.put(key, values);
}

public void setAll(Map values) {
values.forEach(this::set);
}

public Map toSingleValueMap() {
LinkedHashMap singleValueMap = new LinkedHashMap(this.targetMap.size());
this.targetMap.forEach((key, values) -> {
if (values != null && !values.isEmpty()) {
singleValueMap.put(key, values.get(0));
}

});
return singleValueMap;
}
编程小号
上一篇 2025-02-06 22:06
下一篇 2025-03-03 09:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/146231.html