Controller接收Postman的raw参数时,属性值全部为空
情景再现
在进行业务代码的编写过程中,使用Postman等工具调用Controller接口时,发现属性值全部为空
后端代码如下:
Requset对象为:
public class QuerySkuRequest {private String storeCode;private String skuOrSn;private Integer type;// 构造方法 setter/getter 等方法省略
}
Controller:
@Api(value = "ScanProduct",tags = "扫一扫查询商品详情")
@RestController
@Slf4j
@RequestMapping("/xpos/scanProduct")
public class ScanProductDetailsController {@RequestMapping(value = "/querySku",method = RequestMethod.POST)@ApiOperation(value ="查询商品详情",notes = "查询商品详情")public QuerySkuResponse querySkuOnSn(@RequestBody QuerySkuRequest request){log.info("扫一扫查询详情信息请求:{}",request);// 其他业务逻辑}}
PostMan的Header中设置如下行:
PostMan的Body,选择raw格式:
发送之后request对象的属性结果:
检查问题
- 是否是属性值名称填写有问题,无法映射?
直接通过fastjson下的
@JSONField(name="")
直接写明映射
- 更换x-www-form-urlencoded方式请求,是否是忘记写
@RequestBody
?
controller中不写@RequestBody默认是通过表单方式提交,不是采用json,因此需要添加@RequestBody
猜想
是不是@RequsetBody
失效?
可能是@RequsetBody注解的问题
解决
最终发现@RequestBody引包错误!
应该要引
import org.springframework.web.bind.annotation.RequestBody;
而swagger同样有一个同名注解:
import io.swagger.v3.oas.annotations.parameters.RequestBody
写在同一个地方,都不会报错!!!
在引入了swagger的朋友们一定要注意!