You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC中含HTML标签与\n的请求报400错误原因及原理咨询

问题分析与核心机制解析

一、400错误的本质原因

你遇到的问题是Spring MVC或配套安全组件的请求内容校验/拦截机制被触发了——当请求包含HTML标签(如<p></p>)、换行符(\n)这类内容时,系统判定请求存在潜在风险或不符合参数规则,直接返回400 Bad Request,不会将请求传递到Controller层。

二、分请求类型的具体拦截机制

1. 表单请求场景

表单提交触发400,大概率是以下两种拦截逻辑在生效:

  • Spring MVC默认HTML校验:Spring MVC自带的HtmlCharacterEncodingFilter会对表单参数做基础XSS防护校验,一旦检测到<>这类HTML标签,会直接判定为潜在攻击请求,返回400。
  • 自定义表单参数规则:部署团队可能配置了自定义参数校验规则,比如限制表单参数不能包含特殊标签、换行符,触发规则后直接拦截请求。

2. JSON请求场景

JSON请求出现该问题,常见两种情况:

  • Jackson反序列化限制:如果后端实体类字段未配置宽松的反序列化规则,当JSON字符串里包含未转义的HTML标签或换行符时,Jackson会抛出JsonParseException,Spring MVC捕获后返回400。
  • Spring Security请求体扫描:很多项目会通过Spring Security的自定义XssFilter扫描JSON请求体,检测到HTML标签这类风险内容时,直接拦截返回400。

三、拦截的通用逻辑流程

所有这类拦截都遵循统一的前置处理逻辑:

  1. 请求到达服务器后,先经过过滤器/拦截器(在Controller之前)。
  2. 拦截组件读取请求参数或请求体内容,用预设正则规则匹配(比如匹配<[^>]+>识别HTML标签,匹配\n识别换行符)。
  3. 一旦匹配到风险规则,直接返回400状态码,终止请求流程。

由于你不负责部署,这些校验规则大概率是运维/部署团队在Spring配置文件(application.yml/application.properties)、自定义过滤器、Spring Security配置中设置的。

四、快速排查验证方法

  • 尝试将特殊内容转义后发送:把<p>转成&lt;p&gt;,把\n转成\\n,如果请求能正常发送,即可确认是转义/校验规则导致的问题。
  • 查看浏览器控制台的400响应体,部分场景会返回具体错误提示(如"Invalid character found in request parameter"),可直接定位拦截组件。

内容的提问来源于stack exchange,提问作者rensothearin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:37:07