Spring Boot中Java对象列表的日期条件数据查询实现
控制器类
public Object getDashboardUser(@RequestParam("state") String state, @RequestParam("startDate") String startDate, @RequestHeader(GradebookConstants.AUTHORIZATION) String token) { try { var query = new FindDashboardUser(); query.setState(state); query.setStartDate(startDate); var response = queryGateway.query(query, ResponseTypes.instanceOf(Object.class)).join(); if (response == null) { return new ResponseEntity<>(null, HttpStatus.NO_CONTENT); } return response; } catch (Exception ex) { logger.info(ex.getMessage()); var safeErrorMessage = GradebookConstants.FAILED_TO_GET_BY_ID; return new ResponseEntity<>(safeErrorMessage, HttpStatus.INTERNAL_SERVER_ERROR); } }
查询实现类(需求:按日期筛选数据)
需求说明:需根据传入的startDate参数进行数据筛选,若startDate与WidgetData的createdDate匹配,则仅返回该记录;若不匹配,则返回全部用户数据。
原代码
@QueryHandler @Override public Object getDashboardUser(FindDashboardUser query) { List<WidgetData> widget = new ArrayList<WidgetData>(); widget.add(new WidgetData("1", "Needs Grading User", 1, "0988-884884-144a","10-18-2022")); widget.add(new WidgetData("4", "Needs Grading User", 3, "0988-884884-244b","10-17-2022")); widget.add(new WidgetData("3", "Needs Grading User", 5, "0988-884884-344c","10-19-2022")); widget.add(new WidgetData("5", "Needs Grading User", 4, "0988-884884-444d","10-20-2022")); widget.add(new WidgetData("2", "Needs Grading User", 2, "0988-884884-544e","10-21-2022")); List<DashboardUserResponseDto> user = new ArrayList<DashboardUserResponseDto>(); user.add(new DashboardUserResponseDto("0988-884884-344", "User Dashboard Widget", "Custom Widget", widget)); Collections.sort(widget, (id1, id2) -> (id2.getWidgetId().compareTo(id1.getWidgetId()))); Map<String, String> map = new HashMap<>(); for (WidgetData widgetData : widget.toArray(new WidgetData[0])); return user; }
实现需求后的代码
@QueryHandler @Override public Object getDashboardUser(FindDashboardUser query) { // 初始化模拟数据 List<WidgetData> widgetList = new ArrayList<>(); widgetList.add(new WidgetData("1", "Needs Grading User", 1, "0988-884884-144a", "10-18-2022")); widgetList.add(new WidgetData("4", "Needs Grading User", 3, "0988-884884-244b", "10-17-2022")); widgetList.add(new WidgetData("3", "Needs Grading User", 5, "0988-884884-344c", "10-19-2022")); widgetList.add(new WidgetData("5", "Needs Grading User", 4, "0988-884884-444d", "10-20-2022")); widgetList.add(new WidgetData("2", "Needs Grading User", 2, "0988-884884-544e", "10-21-2022")); // 获取传入的筛选日期 String startDate = query.getStartDate(); List<WidgetData> filteredWidgets = new ArrayList<>(); // 执行筛选逻辑 if (startDate != null && !startDate.isEmpty()) { // 匹配createdDate的记录 for (WidgetData widget : widgetList) { if (startDate.equals(widget.getCreatedDate())) { filteredWidgets.add(widget); } } // 无匹配结果时返回全部数据 if (filteredWidgets.isEmpty()) { filteredWidgets = widgetList; } } else { // 无筛选条件时返回全部数据 filteredWidgets = widgetList; } // 按widgetId降序排序 Collections.sort(filteredWidgets, (id1, id2) -> id2.getWidgetId().compareTo(id1.getWidgetId())); // 构造响应DTO List<DashboardUserResponseDto> userResponse = new ArrayList<>(); userResponse.add(new DashboardUserResponseDto( "0988-884884-344", "User Dashboard Widget", "Custom Widget", filteredWidgets )); return userResponse; }
关键修改说明
- 从
query中获取传入的startDate参数作为筛选依据 - 新增筛选逻辑:
startDate非空时筛选匹配记录,无匹配或参数为空则返回全部数据 - 移除原代码中无意义的
Map定义和空循环,优化代码结构
WidgetData类
public class WidgetData { private String widgetId; private String widgetName; private Integer sequence; private String userId; private String createdDate; // 补充构造方法,用于初始化对象 public WidgetData(String widgetId, String widgetName, Integer sequence, String userId, String createdDate) { this.widgetId = widgetId; this.widgetName = widgetName; this.sequence = sequence; this.userId = userId; this.createdDate = createdDate; } // 补充必要的getter方法,用于属性访问 public String getCreatedDate() { return createdDate; } public String getWidgetId() { return widgetId; } // 其他getter/setter可按需补充 }
DashboardUserResponseDto类
@Data @AllArgsConstructor @NoArgsConstructor @JsonInclude(JsonInclude.Include.NON_NULL) public class DashboardUserResponseDto { private String userId; private String name; private String type; private List<WidgetData> widgetDetails; }
内容的提问来源于stack exchange,提问作者Mahrukh Ahmad
相关产品推荐
相关产品推荐

