记录一次联调中由于@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<>();
}
测试一下
好了,就是这么个简单的问题。