Spring接收IoT传感器上报JSON提示Required request body is missing如何解决
问题解决方案
这个报错是Spring MVC无法从请求中读取到符合要求的JSON请求体导致的,可按照以下步骤逐一排查解决:
解决步骤
- 1. 调整接口请求方法配置,或者设置请求体非必填
你当前接口同时支持GET、POST请求,而GET请求本身没有请求体,只要用GET方式调用接口就会触发该报错,修改方案二选一:
方案1:仅保留POST请求适配传感器上报场景
方案2:如果需要兼容GET请求,设置请求体非必填@Controller // 类名建议遵守Java大驼峰命名规范 public class IotController { @RequestMapping(value = {"/iot.do"}, method = {RequestMethod.POST}) public void verifyiot(HttpServletRequest request, @RequestBody IotVO iotvo) throws Exception { System.out.println("kkkk >>>" + iotvo.getDatetime()); } }// required设为false后,无请求体时不会直接报错 public void verifyiot(HttpServletRequest request, @RequestBody(required = false) IotVO iotvo) throws Exception { // 业务代码增加空判断即可 if(iotvo != null){ System.out.println("kkkk >>>" + iotvo.getDatetime()); } } - 2. 确认接口访问路径匹配
你需要核对Spring项目的上下文路径配置:- 如果
application.properties/application.yml里配置了server.servlet.context-path=/prism,那么正确的访问地址是localhost:8080/prism/iot.do - 如果没有配置上下文路径,正确的访问地址是
localhost:8080/iot.do,访问带/prism的路径会找不到对应接口
- 如果
- 3. 检查传感器上报请求配置
确认设备上报的请求满足以下要求:- 请求方法为POST
- 请求头
Content-Type值为application/json - 请求体JSON格式合法,无语法错误
- 4. 确认IotVO类符合反序列化要求
IotVO类需要满足Spring JSON消息转换器的解析要求:- 存在公共无参构造方法
- 所有字段名和上报JSON的key完全对应,字段类型匹配(比如deviceid为Long类型、temperature为Float/Double类型等)
- 所有字段都有对应的getter、setter方法
- 5. 接口可用性验证
可以先通过Postman、Apipost等接口测试工具模拟上报请求,确认接口本身可以正常接收数据后,再对接传感器设备,快速区分是服务端配置问题还是设备上报配置问题。
内容的提问来源于stack exchange,提问作者HWAN
相关产品推荐
相关产品推荐

