后端代码:
Postman传入参数:
Postman报错:
后端报错:
WARN 10784 --- [nio-8081-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver :
Resolved [org.springframework.web.bind
.MissingServletRequestParameterException:
Required request parameter 'maxTime' for
method parameter type String is not present]
分析问题原因:
① 检查是否缺少参数
② 检查请求类型是否匹配
③ 检查参数名称是否一致
④ 检查传入参数是否被正确接收,接收后是否能被正确解析。
本文代码报错的原因:
@RequestParam
主要用于处理简单的键值对形式的数据,它不能很好地处理JSON
格式的数据。如果发送的请求体是JSON
格式(如{"name": "John", "age": 30}
),@RequestParam
通常无法正确解析这个数据。因为JSON
数据的结构和@RequestParam
期望的简单键值对(如表单数据或查询参数)不同。
解决方法:
① 更改传入参数的格式,改为键值对形式的数据。
② 修改后端接收方式。
可以将@RequestParam
注解改为@RequestBody
。同时,需要创建一个Java
类来接收这些参数。
以我的代码举例:
创建一个GasDataRequest
类来接收这些参数.
@Data
public class GasDataRequest {
private String minTime;
private String maxTime;
private Integer pageNum;
private Integer pageSize;
private Character queryType;
}
然后修改后端代码:
@ApiOperation("查询燃气传感器数据")
@PostMapping("/get_gas_data")
public ResBean getGasData(@RequestBody GasDataRequest gasDataRequest,
HttpServletResponse response) {
PageInfo<Map<String, Object>> gasSensorData =
sensorService.getGasSensorData(gasDataRequest.getMinTime(),
gasDataRequest.getMaxTime(),
gasDataRequest.getPageNum(),
gasDataRequest.getPageSize(),
gasDataRequest.getQueryType());
response.setStatus(200);
return ResBean.ok("ok", gasSensorData);
}