WebClient发送JSON请求体时换行符转义异常问题排查
GraphQL请求体换行符转义问题解决
这不是WebClient的Bug,核心是JSON序列化的转义逻辑没处理到位:
- 代码里写
"\n"时,这是Java的实际换行符,JSON序列化器会将其转为JSON标准的换行表示(即请求体里的\n),wiretap日志显示的\n是正常的转义后内容,并非未转义 - 写
"\\n"时,Java字符串里存储的是转义后的\n字符,JSON序列化器会再次转义,导致最终请求体出现\\\n(日志里显示为\\\\n是因为日志输出时又做了一次转义)
解决步骤
- 直接使用实际换行符:在需要添加换行的字符串里直接写
"\n",比如String text = "line1\nline2",让默认的Jackson序列化器自动处理转义,最终请求体里会正确出现\n - 禁止手动转义:不要自行把字符串转成
"\\n",否则会触发JSON序列化的二次转义 - 检查GraphQL客户端序列化配置:如果你用的
WebClientGraphQLClient自定义了JSON序列化器,确认其是否开启了正确的转义规则,确保换行符被正常处理
代码示例(变量构建部分)
// 正确构建带换行的GraphQL变量 String targetContent = "第一段内容\n第二段内容"; Map<String, Object> graphqlVariables = new HashMap<>(); graphqlVariables.put("content", targetContent); // 后续用WebClientGraphQLClient发送请求即可
你的现有WebClient配置(HttpClient wiretap、请求头部分)无需修改,问题不在HTTP传输层,而在请求体的JSON序列化环节。
内容的提问来源于stack exchange,提问作者H Nakazawa
相关产品推荐
相关产品推荐

