2016-08-17 2 views
0

Привет, а весной обучения я застрял в следующий код не уверен, что не так с этим кодомjava.lang.IllegalArgumentException: нет продукта не найдено

@Repositiry

@Repository 
    public class ProductRepositiryImpl implements ProductRepositiry { 

     private List<Product> listOfAllProducts = null; 

     public ProductRepositiryImpl() { 
      listOfAllProducts = new LinkedList<>(); 

      Product iphone = new Product("A1232", "iPhone", new BigDecimal(500)); 
      iphone.setDescription("iPhone 6s with 5.2' FHD Screen"); 
      iphone.setManfactuer("Apple"); 
      iphone.setCategory("Smart Phone"); 
      iphone.setUnitsInStock(699); 

      listOfAllProducts.add(iphone); 
     } 

     @Override 
     public List<Product> getAllProducts() { 
      return listOfAllProducts; 
     } 

     @Override 
     public Product getProductsById(String productId) { 
      Product productById = null; 
      for (Product product : listOfAllProducts) { 
       if (product != null && product.getProductId() != null && product.getProductId().equals(productId)) { 
        productById = product; 
        break; 
       } 

       if (productById == null) 
        throw new IllegalArgumentException("no product found " + productId); 

      } 
      return productById; 

     } 

    } 


**Service** 



@Service 
public class ProductServiceImpl implements ProductService { 

    @Autowired 
ProductRepositiry productRepositiry; 

@Override 
public void processOrder(String productId, long count) { 
    System.out.println("inside Process Order"); 

    Product getProductByid = productRepositiry.getProductsById(productId); 
    System.out.println("get product by id"); 
    System.out.println(getProductByid); 
    if (getProductByid.getUintsInOrder() < getProductByid.getUnitsInStock()) { 
     throw new IllegalArgumentException("OUT OF STOCK" + getProductByid.getUintsInOrder()); 
    } 
     getProductByid.setUintsInOrder(getProductByid.getUintsInOrder() - count); 
} 
**@controller** 



@Controller 
public class OrderController { 

    @Autowired 
    OrderService orderService; 

    @RequestMapping("/order/A1234/2") 
    public String processOrder() { 
     System.out.println("process order"); 
     orderService.processOrder("A1232", 2); 
     return "redirect:/product"; 
    } 
} 

StackTrack

SEVERE: Servlet.service() для сервлета [диспетчерСервер] в контексте с path [/ web_Store] выбрал исключение [Ошибка обработки запроса; вложенной исключение составляет java.lang.IllegalArgumentException: нет продукт найдено A1233] с первопричины java.lang.IllegalArgumentException: нет продукт не найден A1233 на com.webstore.repoImpl.ProductRepositiryImpl.getProductsById (ProductRepositiryImpl.java:58) на com.webstore.serviceImpl.OrderServiceImpl.processOrder (OrderServiceImpl.java:20) на com.webstore.controller.OrderController.processOrder (OrderController.java:18) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) при sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) в jav a.lang.reflect.Method.invoke (Unknown Source)

В классе ProductRepositiryImpl всякий раз, когда я пытаюсь выполнить метод getProductsById(String productId) и при отладке я productById = product; держит действительное значение, то он должен выйти из цикла, почему по-прежнему получать IllegalArgumentException любая помощь будет appericiated

с наилучшими пожеланиями

+2

В вашем примере это не имеет значения, но ваш файл 'если (productById == NULL)' на неправильном месте. Он должен быть за пределами цикла for, иначе он выдает ошибку, если продукт FIRST не является правильным. –

+0

@FlorianSchaetz спасибо, я бы посмотрел здесь сначала –

ответ

1
public ProductRepositiryImpl() { 
      listOfAllProducts = new LinkedList<>(); 

      Product iphone = new Product("A1232", "iPhone", new BigDecimal(500)); 
      iphone.setDescription("iPhone 6s with 5.2' FHD Screen"); 
      iphone.setManfactuer("Apple"); 
      iphone.setCategory("Smart Phone"); 
      iphone.setUnitsInStock(699); 

      listOfAllProducts.add(iphone); 
    } 

Вы добавляете продукт с ID A1232

@RequestMapping("/order/A1234/2") 
    public String processOrder() { 
     System.out.println("process order"); 
     orderService.processOrder("A1233", 2); 
     return "redirect:/product"; 
    } 

Вы пытаетесь получить продукт с ID A1233

EDIT 1:

Как @Florian сказал в комментарии выше. Переместить чек на productById == null снаружи для петли

public Product getProductsById(String productId) { 
      Product productById = null; 
      for (Product product : listOfAllProducts) { 
       if (product != null && product.getProductId() != null && product.getProductId().equals(productId)) { 
        productById = product; 
        break; 
       }    
      } 
      if (productById == null) 
        throw new IllegalArgumentException("no product found " + productId); 

      return productById; 

} 
+0

на самом деле это не повод, посмотрите на комментарий от @FlorianSchaetz, решил ошибку btw спасибо :) –

+1

Но хорошо видно. По иронии судьбы, отображение для A1234 ;-) –

+0

ok позвольте мне изменить вопрос тогда;) –

Смежные вопросы