完美解决 java.lang.IllegalArgumentException: Invalid character found in method name

一、问题描述

使用注解 @PostMapping 的接口 ,入参使用注解 @RequestBody ,请求入参为JSON格式,使用 Postman 调用,接口返回500,本地调试跳不进方法,RequestBody 参数取不到值,报下面几个错误:

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing
检查body肯定是传入了
Error parsing HTTP request header...java.lang.IllegalArgumentException: Invalid character found in method name xxxx

这个异常通常发生在HTTP请求解析过程中,当请求中的方法名(如GET、POST等)包含了非法字符时,会抛出此异常。

二、定位问题

  1. 检查协议是否支持或者正确,例如:用 https 替换 http,或者 http 替换 https

  2. 检查客户端发起的HTTP请求,确保请求方法名是合法的。合法的方法名通常包括大写的 GETPOSTPUTDELETEHEADOPTIONSTRACEPATCH 等。

  3. 如果是编写代码时手动构造HTTP请求,确保方法名的生成逻辑是正确的,没有包含非法字符。检查方法名是否存在数字开头、有空格、特殊字符等情况。

  4. 如果是解析第三方发送的HTTP请求,确保解析库或框架能正确处理所有合法的方法名,并且有适当的错误处理机制来捕获并报告非法字符的异常。

  5. 如果是在Web服务器或应用服务器,如Tomcat, Jetty等,上遇到此异常,检查服务器配置是否有误,或是被安全设置导致方法名被过滤或修改。

修复这个问题需要定位到具体的HTTP请求处理的每一个过程,检查请求构造和解析的每个环节,确保方法名的合法、正确的被解析。

三、解决步骤

根据错误,查看tomcat源码

报错 Http11InputBuffer

没有发现什么问题

四、解决方案

尝试调整Postman的配置 

Headers 默认参数太多了,也太大了,把 Headers 参数前面的勾都去掉,

只保留一个Content-Type:   application/json ,

把 token 移到 Postman的Auth的Tab里。

或者代码中加入 @Headers(“Content-Type:application/json; charset=utf-8)

type 选 Bearer Token,输入 token ,

然后 Postman 发请求,本地调试可以跳进方法了,也能获得RequestBody 参数的值,完美解决问题。

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值