You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot待办应用按用户ID与日期区间过滤返回空数组问题排查

问题排查及解决方案

问题根因

  • DTO属性与请求参数不匹配:FilterTodoByUserDto中用户ID字段名为id,但请求体中传的键是userId,JSON反序列化时无法映射,导致dto.getId()返回null,无法匹配数据库的user_id字段。
  • 日期区间顺序错误:Spring Data JPA的Between关键字要求第一个参数为区间起始值(较小值),第二个为区间结束值(较大值)。请求中date1为2021-01-01、date2为2000-01-01,等同于查询date BETWEEN '2021-01-01' AND '2000-01-01',无符合条件的记录。
  • GET请求错误使用@RequestBody:HTTP GET协议规范不建议携带请求体,Spring默认不会处理GET请求的请求体参数,导致DTO所有属性都为null,查询条件无效。
  • 日期反序列化配置缺失:DTO中的date1、date2是java.util.Date类型,没有添加序列化注解的情况下,直接传入字符串格式的日期会导致反序列化失败,日期属性为null。

解决方案

  • 修正DTO属性映射与日期序列化配置:修改FilterTodoByUserDto的字段与请求参数匹配,同时添加日期序列化注解避免反序列化失败:
    public class FilterTodoByUserDto {
        private Long userId; // 原id改为userId和请求参数匹配
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date date1;
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date date2;
    
        // 同步修改原getId/setId为getUserId/setUserId
        public Long getUserId() {
            return userId;
        }
        public void setUserId(Long userId) {
            this.userId = userId;
        }
        // 其余getter、setter保持不变
    }
    
  • 增加日期顺序容错逻辑:在Service层自动调整日期顺序,避免前端传参顺序错误导致查询失效:
    public List<Todo> filterTodosByUserId(FilterTodoByUserDto dto){
        Date date1 = dto.getDate1();
        Date date2 = dto.getDate2();
        // 自动交换日期保证起始日期小于结束日期
        if(date1.after(date2)){
            Date temp = date1;
            date1 = date2;
            date2 = temp;
        }
        return todoRepository.findTodosByDateBetweenAndUserId(date1, date2, dto.getUserId());
    }
    
  • 修正接口请求方式:将原GET接口改为POST,支持请求体传参:
    @PostMapping("user/todos/filter") // 替换原@GetMapping
    public List<Todo> filterTodosById(@RequestBody FilterTodoByUserDto dto){
        return todosService.filterTodosByUserId(dto);
    }
    
  • 调整请求参数:修正后的请求体示例如下:
    {"userId":1, "date1":"2000-01-01", "date2":"2021-01-01"}
    

内容的提问来源于stack exchange,提问作者humblecoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 00:36:03