티스토리 뷰

 

 

 

 

오류발생

 

 

 

그래서 db확인해봄

 

 

 

 

근데 콘솔에는 상품아이디 생성된게 출력됨

 

 

 

문제의 코드

 

	@PostMapping("/add")
	public String submitAddNewProduct(@ModelAttribute("addProduct")Product product, HttpServletRequest request) 
	{
		MultipartFile img = product.getProductImage();
		
		String saveName = img.getOriginalFilename();
		String save = request.getSession().getServletContext().getRealPath("/resources/images");
		
		File saveFile = new File(save, saveName);
		if(img !=null&& ! img.isEmpty()) 
		{
			try {
				img.transferTo(saveFile);
				product.setFileName(saveName); // 17단원 추가
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new RuntimeException("상품 이미지 업로드가 실패하였습니다.");
			}
		}
		System.out.println("PostMapping 도착");
        
		productService.setNewProduct(product);		
		
		String pdId = generateProductId(10);
		System.out.println(pdId);
		product.setProductId(pdId);
		
		
		
		return "redirect:/products";
	}
	
	
	private String generateProductId(int length) {
	    if (length <= 0) {
	        throw new IllegalArgumentException("길이는 1이상이어야 합니다.");
	    }
	    
	    Random random = new Random();
	    StringBuilder stringBuilder = new StringBuilder();
	    
	    for (int i = 0; i < length; i++) {
	        int randomNumber = random.nextInt(10);
	        stringBuilder.append(randomNumber);
	    }
	    
	    return "P_" + stringBuilder.toString();
	}

 

위의 코드에서 PostMapping을 봐야하는데

그 코드 중에서도 productId를 설정하고 setNewProduct하는 부분을 보아야한다.

 

setNewProduct 메서드를 호출하여 product 객체를 입력해주는데 

나는 productId보다 위에 작성하여 Id가 생성되기 전에 setNewProduct 메서드를 호출하여 입력해주었다.

 

그렇기 때문에 Id 값이 제대로 입력되지 않는 것이다.

 

 

 

 

 

문제점을 인식하고 코드의 순서를 변경해주었다.

 

	@PostMapping("/add")
	public String submitAddNewProduct(@ModelAttribute("addProduct")Product product, HttpServletRequest request) 
	{
		MultipartFile img = product.getProductImage();
		
		String saveName = img.getOriginalFilename();
		String save = request.getSession().getServletContext().getRealPath("/resources/images");
		
		File saveFile = new File(save, saveName);
		if(img !=null&& ! img.isEmpty()) 
		{
			try {
				img.transferTo(saveFile);
				product.setFileName(saveName); // 17단원 추가
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new RuntimeException("상품 이미지 업로드가 실패하였습니다.");
			}
		}
		System.out.println("PostMapping 도착");
		
		
		String pdId = generateProductId(10);
		System.out.println(pdId);
		product.setProductId(pdId);
		
		
		productService.setNewProduct(product);		
		return "redirect:/products";
	}
	
	
	private String generateProductId(int length) {
	    if (length <= 0) {
	        throw new IllegalArgumentException("길이는 1이상이어야 합니다.");
	    }
	    
	    Random random = new Random();
	    StringBuilder stringBuilder = new StringBuilder();
	    
	    for (int i = 0; i < length; i++) {
	        int randomNumber = random.nextInt(10);
	        stringBuilder.append(randomNumber);
	    }
	    
	    return "P_" + stringBuilder.toString();
	}

 

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday