Java 方法中的大十进制比较问题

Java 方法中的大十进制比较问题,java,spring,methods,bigdecimal,Java,Spring,Methods,Bigdecimal,我试图根据价格高低来筛选产品。这就是我正在测试的URL 这是我的存储库(ProductRepository) 但我总是得到一张空白页,上面没有我传递的所有数据的数据。因此,我猜问题在于在InMemoryProductRepository类中的getProductsByPriceFilter方法。在您的比较中,问题就在这里: if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice()

我试图根据价格高低来筛选产品。这就是我正在测试的URL

这是我的存储库(ProductRepository)


但我总是得到一张空白页,上面没有我传递的所有数据的数据。因此,我猜问题在于InMemoryProductRepository类中的getProductsByPriceFilter方法。

在您的比较中,问题就在这里:

if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){

同一整数不能同时为>-1和==0。你的情况永远不会是真的。您可能希望
price.compareTo(低)>=0&&price.compareTo(高)条件。compareTo()<-1是错误的。您应该始终将compareTo()的结果与零进行比较。我已经解决了这个问题,但是mu控制器映射正确吗?因为我仍然没有得到任何数据。我是学习Spring的新手,我想你是说你的网页上没有任何产品。这似乎是另一个问题。您应该放入一些调试语句,查看是否获得有效的高值和低值,以及是否返回产品列表中的任何内容。
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;
    }
public interface ProductService {
    List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low);
}
public List<Product> getProductsByPriceFilter(BigDecimal high, BigDecimal low){
        return productRepository.getProductsByPriceFilter(high, low);
    }
@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";
    }
if((product.getUnitPrice().compareTo(high) < -1) && (product.getUnitPrice().compareTo(high)== 0) && (product.getUnitPrice().compareTo(low) > 1) && (product.getUnitPrice().compareTo(low)==0)){
 if((product.getUnitPrice().compareTo(high) <= 0) && (product.getUnitPrice().compareTo(low) >= 0))