java - springmvc controller接收参数
怪我咯
怪我咯 2017-04-18 10:24:29
[Java讨论组]

思路很简单

controller接收Base64编码,将其转换成字节数组,再以流的形式生成图片。
我本地测试成功,可以形成图片,放到服务器上之后图片生成有问题。

经测试是因为传过来的参数有问题。
应为:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAYCAYAAABjswTDAAANB0lEQVRYRx2WeZDb9XnGPz/d97nSStrV3pf3ss3iE5+LjbGpgWIwaVpCAm0CtCTTa9okbafTyR+ZdKbTNMlMShImx7gYMMYYA6VgjA/w+lzvrb1XXkkrabW67+vXQX+9/3xnvvM+7/N+。。。。

结果为:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAYCAYAAABjswTDAAANB0lEQVRYRx2WeZDb9XnGPz/d97nSStrV3pf3ss3iE5 LjbGpgWIwaVpCAm0CtCTTa9okbafTyR ZdKbTNMlMShImx7gYMMYYA6VgjA/w lzvrb1XXkkrabW67 vXQX 9/3xnvvM 7/N 。。。。

加号都没了

应该怎样接收参数才能避免这个情况呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(5)
黄舟

先解决你的问题,将入参中的“+”用%2B代替

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。
编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。

  • + : URL 中+号表示空格,对应编码:%2B

  • 空格 :URL中的空格可以用+号或者编码表示,对应编码:%20

  • / :分隔目录和子目录,对应编码:%2F

  • ?:分隔实际的URL和参数,对应编码:%3F

  • %:指定特殊字符,对应编码:%25

  • #:表示书签,对应编码:%23

  • &:URL 中指定的参数间的分隔符,对应编码:%26

  • =:URL 中指定参数的值,对应编码:%3D

阿神

对加号进行encode,详情参照这里 URL中带加号的处理

ringa_lee

前端发送之前对加号做encode处理,正常如果是jQuery之类的应该会自动处理吧?

天蓬老师

Base64编码太长了吧,用JQuery2吧,哈哈

黄舟

导致这个问题是因为在URL里 参数字符"+"其实表示的是空格,另外还要注意一些其他特殊字符,也会出现类似的情况;
建议将需要传递的参数使用encodeURIComponent方法进行重新编码,让后后台接收到参数之后再进行解码
另外给一个解码的方法

public final static String unescape(String src) {
        if (StringUtil.isNotBlank(src)) {
            StringBuffer tmp = new StringBuffer();
            tmp.ensureCapacity(src.length());
            int lastPos = 0, pos = 0;
            char ch;
            while (lastPos < src.length()) {
                pos = src.indexOf("%", lastPos);
                if (pos == lastPos) {
                    if (src.charAt(pos + 1) == 'u') {
                        ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
                        tmp.append(ch);
                        lastPos = pos + 6;
                    } else {
                        ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
                        tmp.append(ch);
                        lastPos = pos + 3;
                    }
                } else {
                    if (pos == -1) {
                        tmp.append(src.substring(lastPos));
                        lastPos = src.length();
                    } else {
                        tmp.append(src.substring(lastPos, pos));
                        lastPos = pos;
                    }
                }
            }
            return tmp.toString();
        }
        return null;
    }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号