我有一个包含各种事件的数据库,以及一个相应的实体:
@NoArgsConstructor
@Data
@Table(name="Event")
public class Event {
@Id
private String id;
private String source;
private String action;
private Date timestamp;
private String data;
}
以及一个控制器,它接受QueryDSLPredicate和参数:
@GetMapping("/events")
public List<Event> getEvents(@QuerydslPredicate(root = Event.class) Predicate predicate,
@RequestParam(name = "id", required = false) String id,
@RequestParam(name = "source", required = false) String source,
@RequestParam(name = "action", required = false) String action,
@RequestParam(name = "startTimestamp", required = false) String startTimestamp,
@RequestParam(name = "endTimestamp", required = false) String endTimestamp,
@RequestHeader(required = false) String requestId) {
return StreamSupport.stream(eventRepository.findAll(predicate).spliterator(), false).collect(Collectors.toList());
这对于发送http://localhost:8080/events?source=testSource&action=testAction
这样的指定参数非常有效
但是,如何通过发送starttime和endtime并提取这些时间之间的所有事件来处理日期范围呢?我是querydsl/spring的新手(事实上,我从大学开始就没有写过java),似乎找不到一个很好的例子来说明如何做到这一点。
1条答案
按热度按时间lpwwtiir1#
在此答案https://stackoverflow.com/a/35158320/2930025的帮助下获得此功能
更改了我的控制器,如下所示:
然后添加了一个重载的customize方法到仓库类中:
然后,要调用,只需发送两个时间戳,一个用于startTime,一个用于endTime:
看起来第二个答案的链接问题也将工作,但我不能得到正确的导入工作,所以去与接受答案的方法。