springMVC注解@RequestBody使用中出现HttpMessageNotReadableException:Required request body is missing异常原因与解决

记录一次联调中由于@RequestBody使用出现的小问题

使用@RequestBody注解 传参。如下代码

@RequestMapping(value = "synWorkOrderInfo",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
    public BaseResponse<?> synWorkOrderInfo(@RequestBody WorkOrder workOrder) {
        // 参数校验
        if(null == workOrder){
            throw new BizException(OperationBizExceptionEnum.PARAM_ERROR, "工单参数不能为空,请仔细核对");
        }
        //***
        
        updateWorkOrderStatus(workOrder);
        response.setCharacterEncoding("UTF-8");
        return new BaseResponse<>();
    }

当接口未接收到参数时,框架HttpMessageNotReadableException:Required request body is missing异常

查看源码

原来是框架做了一个类似非空的检查。

再去看@RequestBody注解定义会发现:

缺省值是true。所以当参数为空时会抛异常。程序走不到业务代码中的校验。

那么解决方案就是修改这个属性,将其改成false。这样就能绕开框架的检查了。

 

修改之后就是

@RequestMapping(value = "synWorkOrderInfo",method = RequestMethod.POST,produces = "application/json;charset=UTF-8")
    public BaseResponse<?> synWorkOrderInfo(@RequestBody(required = false) WorkOrder workOrder) {
        // 参数校验
        if(null == workOrder){
            throw new BizException(OperationBizExceptionEnum.PARAM_ERROR, "工单参数不能为空,请仔细核对");
        }
        //*****
        
        updateWorkOrderStatus(workOrder);
        response.setCharacterEncoding("UTF-8");
        return new BaseResponse<>();
    }

测试一下

好了,就是这么个简单的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值