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的朋友们一定要注意!