Resolved [org.springframework.web.bind.MissingServletRequestParameterException]

后端代码:

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);
}

猜你喜欢

转载自blog.csdn.net/weixin_52597907/article/details/143447753