[问题解决方案]JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using

2023-11-12

公司最近跟外部有一个接受图片的接口让我来做,我心想这么简单 (又可以偷懒喽),打开文档一看图片是base64格式的,没啥,不就是base64转字节流吗。一同操作后 测试接受参数 崩出来这个东西。然后就解决呗 ,总不能因为解决不了让人转变发送参数的格式呗。
目前解决的博文都是倾向与修改参数 让参数中不要有转义字符,这怎么可以 ,base64要是动了,又要扯到字节流埙坏,图片一丢丢黑这咋行。。
所以就有了这一片文章喽。

首先分析为啥子会有这个异常
在这里插入图片描述

  • 嗯-.- 根据度娘的翻译我们知道 是因为json解析的问题 ,因为发送的字符中存在需要转移的字符,不然接受不到。
    这样啊 ,百分之80的问题来源就是发送的参数中带着转义字符 而后台用的是json接受 ,程序拿到
    **( [ { / ^ - $ ¦ } ] ) ? * + . ** 没有转义肯定不会解析了啊。

问题解决方案

	那就肯定有人要问楼主 你既然写博文是来解决问题的,我既然这样搜肯定会是需要输这些字符啊。
	不着急  楼主把自己的解决方案贴出来。
	其实思路很简单  
	 nested exception is com.fasterxml.jackson.databind.JsonMappingException  
	不是接受不了转义的参数吗。那我们拿request接受不就好了。
	我们不急 ,我把代码贴出来。

首先controller层接受参数的时候
要先去掉produces = "application/json;charset=UTF-8"

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;


@RestController
@Slf4j
public class BiZiTeOtherController {
 @RequestMapping(value = "/test/UploadImage",method = RequestMethod.POST)
    public String uploadImageBiZiTe(HttpServletRequest request){
    	//GetRequestJsonUtils这个工具类在下面哦
		 String requestPostStr = GetRequestJsonUtils.getRequestPostStr(request);
        System.out.println(requestPostStr);
        //反正楼主用的能正常转成我需要的对象
        //<dependency>
          //  <groupId>com.alibaba</groupId>
            //<artifactId>fastjson</artifactId>
           // <version>1.2.47</version>
       // </dependency>
        UploadImg uploadImg = JSONObject.parseObject(requestPostStr, UploadImg.class);
        log.info(uploadImg.toString());
       return "成功";
    }
}

class  UploadImg{

    //图片分类
    private String picClass;
    //图片关联主键
    private String refId;
    //base64图片字符串
    private String pic;


    @Override
    public String toString() {
        return "uUploadImg{" +
                "picClass='" + picClass + '\'' +
                ", refId='" + refId + '\'' +
                ", pic='" + pic + '\'' +
                '}';
    }

    public String getPicClass() {
        return picClass;
    }

    public void setPicClass(String picClass) {
        this.picClass = picClass;
    }

    public String getRefId() {
        return refId;
    }

    public void setRefId(String refId) {
        this.refId = refId;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }
}
/**
  *  转换reqeest工具类 
**/
public class GetRequestJsonUtils {

    public static JSONObject getRequestJsonObject(HttpServletRequest request) throws IOException {
        String json = getRequestJsonString(request);
        return JSONObject.parseObject(json);
    }
    /***
     * 获取 request 中 json 字符串的内容
     *
     * @param request
     * @return : <code>byte[]</code>
     * @throws IOException
     */
    public static String getRequestJsonString(HttpServletRequest request)
            throws IOException {
        String submitMehtod = request.getMethod();
        // GET
        if (submitMehtod.equals("GET")) {
            return new String(request.getQueryString().getBytes("iso-8859-1"),"utf-8").replaceAll("%22", "\"");
            // POST
        } else {
            return getRequestPostStr(request);
        }
    }
    /* @param request
     * @return
     * @throws IOException
     */
    public static byte[] getRequestPostBytes(HttpServletRequest request)
            throws IOException {
        int contentLength = request.getContentLength();
        if(contentLength<0){
            return null;
        }
        byte buffer[] = new byte[contentLength];
        for (int i = 0; i < contentLength;)
        {
            int readlen = request.getInputStream().read(buffer, i,
                    contentLength - i);
            if (readlen == -1) {
                break;
            }
            i += readlen;
        }
        return buffer;
    }
    /**
     * 描述:获取 post 请求内容
     * <pre>
     * 举例
     * </pre>
     * @param request
     * @return
     * @throws IOException
     */
    public static String getRequestPostStr(HttpServletRequest request) {
        try{
            byte buffer[] = getRequestPostBytes(request);
            String charEncoding = request.getCharacterEncoding();
            if (charEncoding == null) {
                charEncoding = "UTF-8";
            }
            return new String(buffer, charEncoding);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

据说点赞的都是帅哥。
不对,还有美女。



**参数中的这些转义字符不是必须接受的 可以通过前台限制用户输入这些字符,后台也就不用考虑到底  转不转   的过来不是。**
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[问题解决方案]JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using 的相关文章

随机推荐

  • 黄金票据制作-新手入门

    0x01 前言 相信准备学习内网渗透的人 都会知道有黄金票据这个事情 而黄金票据的原理是和攻击方式 网站说的都一大堆概念 很难懂 这里我说声明一下 黄金票据的作用在于做权限维持 原理在于域服务器上有一个krbtgt用户 0x02 黄金票据和
  • 2023Go面试问答_Go Runtime

    Goroutine 定义 Goroutine 是一个与其他 goroutines 并行运行在同一地址空间的 Go 函数或方法 一个运行的程序由一个或更多个 goroutine 组成 它与线程 协程 进程等不同 它是一个 goroutine
  • 惯量比多少合适_惯量比

    电机的负载惯量估计方法 提供了一种电机的负载惯量估计方法 即便在电机的齿槽转矩较大或在负载机械系统中出现共振的时候 这种方法也能够 估计负载惯量 在加速反馈信号中检测振动 当检测到的振动等于或高于预定水平的时候 用系数 乘以估计惯量增益 其
  • 机器学习复习模拟题

    Q1 在回归模型中 下列哪一项在权衡欠拟合 under fitting 和过拟合 over fitting 中影响最大 A 多项式阶数 B 更新权重 w 时 使用的是矩阵求逆还是梯度下降 C 使用常数项 答案 A 解析 选择合适的多项式阶数
  • <刷题笔记>408计算机学科专业基础综合_操作系统_第一章_计算机系统概述_第一篇

    操作系统是一种系统软件 通用软件 普通大众都会使用的 如office 迅雷 专用软件 某些领域的专业人士使用的 如AutoCAD logic Pro 系统软件 计算机中负责管理 运行 控制和维护计算机系统资源的软件 如 操作系统 数据库管理
  • ORACLE updata是提示违反唯一约束条件

    如图所示 使用updata语句时提示违反唯一约束条件 语句如下 update table name set param1 xxx param2 xxx where param4 xxx 解决办法 一 能用Navicat for Oracle
  • wow.js

    一 页面在向下滚动的时候 有些元素会产生细小的动画效果 虽然动画比较小 但却能吸引你的注意 刚知道wow js这个插件 之前写的类似滚动时页面效果都是自己用jQuery写的 现在有了插件 开发更加快捷有效了 演示及下载地址 http www
  • PermissionX开源框架的使用

    背景 动态申请权限是一件特别繁琐的事情 涉及的权限一多 就让人头疼 Android提供给我们的运行时权限申请的API并不是很友好 比如我们需要动态申请打电话的功能 除了在roidManifest xml中声明权限之外 还要在执行拨打电话操作
  • 报错:Avoided redundant navigation to current location: “/login“.完美解决

    需求 登陆之后才能查看主页面 否则跳转至登录页 遇到的问题 一开始是打算直接在拦截器跳转路由的 发现会报错Avoided redundant navigation to current location login 后来灵机一动 用了全局路
  • vue报错:regeneratorRuntime is not defined

    报错原因是使用了 async await 没有配置 babel 导致语法不支持 所以才会报错 首先安装以下依赖 npm install babel plugin transform runtime save dev 或 npm i save
  • 【AnyQ】如何添加插件

    一 已有插件 字典插件 此类插件继承DictInterface接口 哈希词典 HashAdapter
  • SyntaxWarning: name 'x' is assigned to before global declaration global color Python

    SyntaxWarning name x is assigned to before global declaration global color Python 这种报错很大原因是在同一个函数重复使用了global 声明 举个例子 x 0
  • LiveData详细分析2

    一 LiveData是什么东西 1 基于观察者设计模式 LiveData是一种持有可被观察数据的类 被观察者 LiveData需要一个观察者对象 一般是Observer类的具体实现 当观察者的生命周期处于STARTED或RESUMED状态时
  • linux用dd命令刻录u盘,巧用linux dd命令刻录启动U盘

    dd命令是Linux UNIX 下的一个非常有用的命令 作用是用指定大小的块拷贝一个文件 并在拷贝的同时进行指定的转换 大部分用户只知道dd命令的这个用处 殊不知dd命令做usb启动盘也十分方便 下面就让我们一起来看看dd命令是如何运用到刻
  • 聊聊限流、熔断和降级

    背景 分布式系统中的调用关系错综复杂 如何保障整个系统平稳运行则显得尤为重要 限流 熔断和降级应运而生 限流 为了保障下游服务稳定性 通常会提前预估调用QPS 一旦超过预估QPS则可以进行限流 拒绝超出预估的请求 常见的限流算法有固定窗口
  • python插入单条、多条dict类型数据到clickhouse

    比如一个数据库名字叫test 表名称叫just check 插入单条dict数据 import clickhouse connect client clickhouse connect get client host 127 0 0 1 d
  • 【剑指offer】总集

    目录 前言 题目索引 数据结构 数 数据结构 数组 数据结构 字符串 数据结构 链表 数据结构 树 数据结构 队列 栈 堆 前言 想看Leetcode总集篇的点它点它 Leetcode总集篇 算法和算法题的任务目标 主要可分为 增 删 改
  • 什么是网站主服务器域名,主域名服务器是什么

    主域名服务器是什么 内容精选 换一换 香港节点和大陆节点的区别如下 香港节点购买域名后无需备案 可以直接在后台绑定域名并使用 大陆节点购买域名后需要先完成备案 才可以在后台绑定域名 香港节点支持绑定多个一级或者子域名 大陆节点只能绑定一个一
  • Linux高性能服务器编程|阅读笔记:第6章 - 高级I/O函数

    目录 简介 6 1 pipe函数 6 2 dup函数和dup2函数 6 3 readv函数和writev函数 6 4 sendfile函数 6 5 mmap函数和munmap函数 6 6 splice函数 6 7 tee函数 6 8 fcn
  • [问题解决方案]JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using

    公司最近跟外部有一个接受图片的接口让我来做 我心想这么简单 又可以偷懒喽 打开文档一看图片是base64格式的 没啥 不就是base64转字节流吗 一同操作后 测试接受参数 崩出来这个东西 然后就解决呗 总不能因为解决不了让人转变发送参数的