Я пытаюсь фильтровать продукты в соответствии с ценовым диапазоном высокого и низкого уровня. И это URL я тестирую сПроблема сравнения BigDecimal в методе
http://localhost:8080/webstore/products/test?high=900&low=100
Это мой Repository (ProductRepository)
public interface ProductRepository {
List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low);
}
Это мой InMemoryProductRepository класс, который имеет исходные данные и этот метод
public List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low){
List<Product> productsByPriceFilter = new ArrayList<Product>();
for(Product product : listOfProducts){
if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){
productsByPriceFilter.add(product);
}
}
return productsByPriceFilter;
}
вот моя услуга (ProductServ лед)
public interface ProductService {
List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low);
}
А вот моя реализация сервиса (ProductServiceImpl), которые состоят из этого метода
public List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low){
return productRepository.getProductsByPriceFilter(high, low);
}
И, наконец, вот мой ProductController
@RequestMapping("/products/test")
public String getProductsByPriceFilter(@RequestParam("high") BigDecimal high, @RequestParam("low") BigDecimal low, Model model){
model.addAttribute("product", productService.getProductsByPriceFilter(high, low));
return "products";
}
Но я постоянно получаю пустая страница без данных всех данных, которые я прошел в высоком или низком состоянии. Итак, я думаю, проблема лежит с моим getProductsByPriceFilter метод в InMemoryProductRepository класс.
То же целое число, не может быть> -1 и == 0, в то же время. Ваше состояние никогда не будет правдой. Вероятно, вы хотите 'price.compareTo (low)> = 0 && price.compareTo (высокий) <= 0' –
Условие .compareTo() <-1 неверно. Вы всегда должны сравнивать результат compareTo() с нолем. –