Привет, а весной обучения я застрял в следующий код не уверен, что не так с этим кодом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
с наилучшими пожеланиями
В вашем примере это не имеет значения, но ваш файл 'если (productById == NULL)' на неправильном месте. Он должен быть за пределами цикла for, иначе он выдает ошибку, если продукт FIRST не является правильным. –
@FlorianSchaetz спасибо, я бы посмотрел здесь сначала –