我正在尝试创建基于请求主体中发送的字段的动态搜索。我准备了许多规范,并在“摘要规范”(在方法中调用)中,我希望在字段不是空的情况下调用它们。它可以工作,但问题是我永远不知道哪个参数将开始创建条件,所以我不得不添加布尔参数,这导致了许多if else语句的创建。代码:
public Specification<ShapeEntity> conditionalSearch(ShapeParams shapeParams) {
Specification spec = null;
boolean isFirstParam = true;
if (shapeParams.getType() != null) {
if (isFirstParam) {
spec = Specification.where(isTypeEqual(shapeParams.getType()));
isFirstParam = false;
} else {
spec = spec.and(isTypeEqual(shapeParams.getType()));
}
}
if (shapeParams.getWidthTo() != null) {
if (isFirstParam) {
spec = Specification.where(isWidthLessThan(shapeParams.getWidthTo()));
isFirstParam = false;
} else {
spec = spec.and(isWidthLessThan(shapeParams.getWidthTo()));
}
}
if (shapeParams.getWidthFrom() != null) {
if (isFirstParam) {
spec = Specification.where(isWidthGreaterThan(shapeParams.getWidthTo()));
isFirstParam = false;
} else {
spec = spec.and(isWidthGreaterThan(shapeParams.getWidthTo()));
}
}
return spec;
}
有什么方法可以优化它吗?规范必须总是以“.where”作为第一个开始,接下来我可以添加其他条件,我甚至希望有10+个参数
1条答案
按热度按时间9bfwbjaz1#
您可以编写一些方法来接收一些值以进行验证并返回boolean。
您可以检查Optional的使用,它可能对一些if块有帮助。
您可以检查是否可以合并某些条件。