美文网首页
RestTemplatet post提交数据

RestTemplatet post提交数据

作者: 有点胖的小乐乐 | 来源:发表于2018-11-14 22:03 被阅读39次

一、问题?

今天想通过Spring 自带的RestTemplate发送post请求提交数据。搜索了下,发现网上有这种写法。


post提交数据

服务端用下面的方式接收


服务端接收
param的值如下
image.png

发现接收到的数据的值都是List类型。

二 、 LinkedMultiValueMap 源代码解析

public class LinkedMultiValueMap<K, V> implements MultiValueMap<K, V>, Serializable, Cloneable {

    private static final long serialVersionUID = 3801124242820219131L;

       // 内部存储结构
    private final Map<K, List<V>> targetMap;

    /**
     * Create a new LinkedMultiValueMap that wraps a {@link LinkedHashMap}.
     */
    public LinkedMultiValueMap() {
        this.targetMap = new LinkedHashMap<>();
    }

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

    public LinkedMultiValueMap(Map<K, List<V>> otherMap) {
        this.targetMap = new LinkedHashMap<>(otherMap);
    }


    // MultiValueMap implementation

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

        // 添加key,value的时候,实际上对应的值是list,是往list里面添加值
    @Override
    public void add(K key, @Nullable V value) {
        List<V> values = this.targetMap.computeIfAbsent(key, k -> new LinkedList<>());
        values.add(value);
    }

    @Override
    public void addAll(K key, List<? extends V> values) {
        List<V> currentValues = this.targetMap.computeIfAbsent(key, k -> new LinkedList<>());
        currentValues.addAll(values);
    }

    @Override
    public void addAll(MultiValueMap<K, V> values) {
        for (Entry<K, List<V>> entry : values.entrySet()) {
            addAll(entry.getKey(), entry.getValue());
        }
    }

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

    @Override
    public void setAll(Map<K, V> values) {
        values.forEach(this::set);
    }

    @Override
    public Map<K, V> toSingleValueMap() {
        LinkedHashMap<K, V> singleValueMap = new LinkedHashMap<>(this.targetMap.size());
        this.targetMap.forEach((key, value) -> singleValueMap.put(key, value.get(0)));
        return singleValueMap;
    }


    // Map implementation

    @Override
    public int size() {
        return this.targetMap.size();
    }

    @Override
    public boolean isEmpty() {
        return this.targetMap.isEmpty();
    }

    @Override
    public boolean containsKey(Object key) {
        return this.targetMap.containsKey(key);
    }

    @Override
    public boolean containsValue(Object value) {
        return this.targetMap.containsValue(value);
    }

    @Override
    @Nullable
    public List<V> get(Object key) {
        return this.targetMap.get(key);
    }

    @Override
    @Nullable
    public List<V> put(K key, List<V> value) {
        return this.targetMap.put(key, value);
    }

    @Override
    @Nullable
    public List<V> remove(Object key) {
        return this.targetMap.remove(key);
    }

    @Override
    public void putAll(Map<? extends K, ? extends List<V>> map) {
        this.targetMap.putAll(map);
    }

    @Override
    public void clear() {
        this.targetMap.clear();
    }

    @Override
    public Set<K> keySet() {
        return this.targetMap.keySet();
    }

    @Override
    public Collection<List<V>> values() {
        return this.targetMap.values();
    }

    @Override
    public Set<Entry<K, List<V>>> entrySet() {
        return this.targetMap.entrySet();
    }

    public LinkedMultiValueMap<K, V> deepCopy() {
        LinkedMultiValueMap<K, V> copy = new LinkedMultiValueMap<>(this.targetMap.size());
        this.targetMap.forEach((key, value) -> copy.put(key, new LinkedList<>(value)));
        return copy;
    }

    @Override
    public LinkedMultiValueMap<K, V> clone() {
        return new LinkedMultiValueMap<>(this);
    }

    @Override
    public boolean equals(Object obj) {
        return this.targetMap.equals(obj);
    }

    @Override
    public int hashCode() {
        return this.targetMap.hashCode();
    }

    @Override
    public String toString() {
        return this.targetMap.toString();
    }

}

内部存储结构为Map<K, List<V>>,当执行add方法的时候是往key对应的List添加一个值,所以可以对应的值是一个List。其他的操作同此道理。

RestTemplatet 如何发送json 数据呢

  1. 通过传接送字符串。


    image.png

    2 .通过普通的map


    image.png

相关文章

  • RestTemplatet post提交数据

    一、问题? 今天想通过Spring 自带的RestTemplate发送post请求提交数据。搜索了下,发现网上有这...

  • GET表单提交/POST表单提交/数据交互/ node 垃圾回收

    GET表单提交 POST表单提交 同时处理get与post请求 数据交互 HTML 数据库 扩展

  • Ajax写法解释

    $.ajax({ //提交数据的类型 POST GET type: "post", //提交的网址 url: "x...

  • 4-ajax流程-open方法和表单

    表单: 数据的提交 get post get, post open方法

  • 面试总结

    1.get和post比较 1>提交方式:GET提交,请求的数据会附在URL之后;POST提交则把数据放置在HTTP...

  • HTML-form表单学习笔记

    一. post和get方式提交数据的区别 安全性:get提交的数据url可以看得到,post看不到,并且get提交...

  • 表单

    一. post和get方式提交数据的区别 安全性:get提交的数据url可以看得到,post看不到,并且get提交...

  • C# WebClient简单实用

    GET获取数据 DownloadString方法 POST提交数据 UploadValues

  • GET和POST

    GET和POST请求的区别 GET请求 POST请求 提交 GET提交,请求的数据会附在URL之后(就是把数据放置...

  • axios学习笔记

    一、axios的基本使用 get,获取数据 post,提交数据(表单提交以及文件上传) put,更新数据 (提交所...

网友评论

      本文标题:RestTemplatet post提交数据

      本文链接:https://www.haomeiwen.com/subject/cljsfqtx.html