Spring Boot JWT认证接口报HttpMessageNotReadableException 400错误如何解决
错误原因
该报错的核心原因是调用/authenticate POST接口时,Spring无法获取到符合要求的请求体,无法映射到控制器方法中被@RequestBody修饰的AuthenticationRequest参数,所以抛出HttpMessageNotReadableException异常并返回400错误,常见触发场景如下:
- 发起请求时未携带任何请求体,空body调用POST接口
- 请求方法使用错误,用GET、PUT等不携带请求体/不符合接口定义的方法调用
- 请求头未设置正确的
Content-Type,未指定为application/json,导致Spring无法将传入的内容解析为JSON映射到实体类 - 传入的JSON存在语法错误,无法被正常解析
你的接口代码和安全配置本身没有逻辑问题,安全层已经放开了该接口的访问权限,报错和权限拦截无关。
解决方案
按照以下步骤排查修正即可:
- 确认请求方法为POST,不要使用GET等其他方法调用该接口
- 检查请求头是否配置了
Content-Type: application/json,如果使用接口调试工具(Postman、Apifox等),需要在Body栏选择raw格式,子类型选择JSON,不要使用form-data、x-www-form-urlencoded格式传参 - 确保请求体携带符合格式要求的JSON内容,示例如下:
{ "username": "实际用户名", "password": "实际密码" }
- 若你有特殊场景需要允许请求体为空,可以将
@RequestBody注解修改为@RequestBody(required = false),但该认证接口必须传入账号密码才能正常逻辑校验,不推荐使用该修改方案。
内容的提问来源于stack exchange,提问作者Michael Torres Ospina
相关产品推荐
相关产品推荐

