【错误】--- An invalid character [32] was present in the Cookie value

本文详细解析了在使用JSON与Cookie进行数据交互时遇到的常见错误及其解决方案,包括处理特殊字符、升级依赖、配置Tomcat等步骤。

 

1.分析错误,这个错误是由于后台

response.addCookie(cookie);

时报的错;是由于转化后的json字符中存在特殊字符,32为ascii码,此时你可以去看tomcat启动日志可能会出现如下警告

[http-nio-8080-exec-5] org.apache.tomcat.util.http.parser.Cookie.logInvalidHeader A cookie header was received [XX] that contained an invalid cookie. That cookie will be ignored.Note: further occurrences of this error will be logged at DEBUG level.

那么现在解决问题是,首先需要将对象转化为json,可以使用

ObjectMapper om = new ObjectMapper();

例如:

 public class TestJson {
 
     @Test
     public void testAdd() throws Exception {
         TestTb testTb = new TestTb();
         testTb.setName("derry");
         ObjectMapper om = new ObjectMapper();
         om.setSerializationInclusion(Include.NON_NULL);
         //将对象转换成json字符串
         Writer wr = new StringWriter();
         om.writeValue(wr, testTb);
         System.out.println(wr.toString());
         //转回对象
         TestTb r = om.readValue(wr.toString(), TestTb.class);
         System.out.println(r.toString());7     
    }
     
}

2.如果还继续报错,可能是由于cookie的版本较低,可以选择升级pom依赖,建议如下

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

3.如果还继续报错,Tomcat启动的那个错误,可以修改tomcat的context.xml文件,在最后</context>前加如下

<CookieProcessor className ="org.apache.tomcat.util.http.LegacyCookieProcessor"/>

4.具体加的原因可以参考:http://www.mamicode.com/info-detail-2018600.html

Oracle 错误 `LRM-00123: invalid character 41344 found in the input file` 表示在数据库启动过程中,Oracle 无法正确解析参数文件(如 `init.ora` 或 `spfile`),因为其中包含了非法字符。该错误通常与初始化参数文件的格式或内容问题相关。 ### 原因分析 1. **参数文件损坏或包含非法字符** 参数文件中可能被插入了不可见字符、特殊符号或非 ASCII 字符,导致 Oracle 在解析时失败。例如,文件可能在编辑过程中使用了不兼容的文本编辑器,或者复制粘贴操作引入了异常字符 [^4]。 2. **参数文件格式错误** 初始化参数文件中的某些参数设置不符合 Oracle 的语法规范,例如缺少等号、值未加引号或存在拼写错误 [^3]。 3. **文件编码问题** 如果参数文件保存为非 ASCII 编码(如 UTF-8 或 Unicode),可能会导致 Oracle 解析失败 [^2]。 --- ### 解决方法 1. **检查并修复初始化参数文件** - 使用文本编辑器(如 `vi`)打开参数文件,检查是否有明显错误- 删除所有空白行和注释行后重新保存文件。 - 确保所有参数格式正确,例如: ```ini db_name=JIAGULUN memory_target=536870912 processes=150 ``` 2. **确认文件编码为 ASCII** - 使用 `file` 命令查看文件类型: ```bash file $ORACLE_HOME/dbs/init$ORACLE_SID.ora ``` - 如果显示非 ASCII 编码,则将其转换为 ASCII 格式。 3. **生成新的参数文件** - 如果当前参数文件已严重损坏,可以尝试从 SPFILE 重建 PFILE: ```sql CREATE PFILE FROM SPFILE; ``` - 重启数据库以测试新生成的参数文件是否有效 [^4]。 4. **检查数据库启动顺序** - Oracle 启动时会按以下顺序查找参数文件: 1. `spfile$ORACLE_SID.ora` 2. `spfile.ora` 3. `init$ORACLE_SID.ora` [^4] - 确认这些文件是否存在冲突或损坏,并确保优先级最高的文件是正确的。 5. **使用 RMAN 检查控制文件及参数一致性** - 进入 RMAN 并尝试恢复参数文件或重建控制文件: ```bash rman target / ``` ```sql STARTUP NOMOUNT; RESTORE CONTROLFILE FROM AUTOBACKUP; ALTER DATABASE MOUNT; ``` --- ### 示例:重建参数文件并启动数据库 ```sql -- 从 SPFILE 重建 PFILE CREATE PFILE='/tmp/initJIAGULUN.ora' FROM SPFILE; -- 关闭数据库实例 SHUTDOWN IMMEDIATE; -- 启动数据库使用新的 PFILE STARTUP PFILE='/tmp/initJIAGULUN.ora'; ``` --- ### 预防措施 - 定期备份参数文件,避免直接编辑原始文件。 - 使用 Oracle 提供的工具(如 `ALTER SYSTEM SET`)动态修改参数。 - 确保文本编辑器保存文件时使用纯文本格式和 ASCII 编码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值