我正在创建一个搜索以从100到600过滤一些Integer值。这些值为Http Status Codes,所以我只想过滤它们。
搜索的工作方式如下:
用户输入搜索值,例如2,点击搜索
结果将是从200到299的所有值(因此所有值均以2开头)。
用户输入一个值,例如20,然后点击搜索
结果将是200到209之间的所有值(因此所有
值以20开头)。
用户输入一个值,例如52,然后点击搜索
结果将是从520到529的所有值(因此所有
值以52开头)
我写了一些非常多余的代码,但基本上解释了它应该如何工作:
public void getHttpStatus(Integer httpStatus){
if(httpStatus.equals(1)){
messageRepository.findByHttpStatusBetween(100, 199);
}
else if(httpStatus.equals(2)){
messageRepository.findByHttpStatusBetween(200, 299);
}
else if(httpStatus.equals(3)){
messageRepository.findByHttpStatusBetween(300, 399);
}
else if(httpStatus.equals(4)){
messageRepository.findByHttpStatusBetween(400, 499);
}
else if(httpStatus.equals(5)){
messageRepository.findByHttpStatusBetween(500, 599);
}
else if(httpStatus.equals(10)){
messageRepository.findByHttpStatusBetween(100, 109);
}
else if(httpStatus.equals(20)){
messageRepository.findByHttpStatusBetween(200, 209);
}
else if(httpStatus.equals(30)){
messageRepository.findByHttpStatusBetween(300, 309);
}
else if(httpStatus.equals(40)){
messageRepository.findByHttpStatusBetween(400, 409);
}
else if(httpStatus.equals(50)){
messageRepository.findByHttpStatusBetween(500, 509);
}
else if(httpStatus.equals(21)){
messageRepository.findByHttpStatusBetween(210, 219);
}
...
}
有没有更简单的方法可以做到这一点?还是有任何自动执行此操作的内置spring方法?
我将不胜感激任何建议。
最佳答案
public class Range {
public int lb;
public int ub;
public Range(int lb, int ub) {
this.lb = lb;
this.ub = ub;
}
public Range(int statusCode) {
int length = (int) (Math.log10(statusCode) + 1);
if (length == 0 || length > 2) {
throw new RuntimeException("Cant parse status code of invald length: " + length);
}
if (length == 1) {
this.lb = statusCode * 100;
this.ub = ((statusCode + 1) * 100) - 1;
} else {
this.lb = statusCode * 10;
this.ub = ((statusCode + 1) * 10) - 1;
}
}
}
public class Main {
public static void main(String[] args) {
Range r1 = new Range(52);
Range r2 = new Range(2);
Range r3 = new Range(20);
System.out.println("Lowerbound: " + r1.lb);
System.out.println("Upperbound: " + r1.ub);
System.out.println("Lowerbound: " + r2.lb);
System.out.println("Upperbound: " + r2.ub);
System.out.println("Lowerbound: " + r3.lb);
System.out.println("Upperbound: " + r3.ub);
}
}
输出如下:
Lowerbound: 520
Upperbound: 529
Lowerbound: 200
Upperbound: 299
Lowerbound: 200
Upperbound: 209
不检查特殊值0。
然后可以将您的函数重构为:
public void getHttpStatus(Integer httpStatus){
Range r = new Range(httpStatus.intValue());
messageRepository.findByHttpStatusBetween(r.lb, r.ub);
}