오류납니다 ㅜㅜ
오류가 나요 mvc 섹션 7-제품상세

컨트롤러 코드
package hello.itemservice.web.basic;
import hello.itemservice.domain.item.Item;
import hello.itemservice.domain.item.ItemRepository;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor
public class BasicItemController {
private final ItemRepository itemRepository;
@GetMapping
public String items(Model model){
List<Item> items = itemRepository.findAll();
model.addAttribute("items", items);
return "basic/items";
}
@GetMapping("/{itemId}")
public String item(@PathVariable long itemId, Model model){
Item item = itemRepository.findById(itemId);
model.addAttribute("item",item);
return "basic/item";
}
@PostConstruct
public void init(){
itemRepository.save(new Item("itemA", 10000,10));
itemRepository.save(new Item("itemB", 20000,20));
}
}
2.resource-basic/item.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<link th:href="@{/css/bootstrap.min.css}"
href="../css/bootstrap.min.css" rel="stylesheet">
<style>
.container {
max-width: 560px;
} </style>
</head>
<body>
<div class="container">
<div class="py-5 text-center">
<h2>상품 상세</h2> </div>
<div>
<label for="itemId">상품 ID</label>
<input type="text" id="itemId" name="itemId" class="form-control" value="1" th:value="${item.id}" readonly>
</div> <div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName" class="form-control" value="상품A" th:value="${item.itemName}" readonly> </div>
<div>
<label for="price">가격</label>
<input type="text" id="price" name="price" class="form-control" value="10000" th:value="${item.price}" readonly>
</div> <div>
<label for="quantity">수량</label>
<input type="text" id="quantity" name="quantity" class="form-control" value="10" th:value="${item.quantity}" readonly>
</div>
<hr class="my-4">
<div class="row">
<div class="col">
<button class="w-100 btn btn-primary btn-lg" onclick="location.href='editForm.html'" type="button">상품 수정</button>
</div>
<div class="col">
<button class="w-100 btn btn-secondary btn-lg"
onclick="location.href='items.html'" type="button">목록으로</button> </div>
</div>
</div> <!-- /container -->
</body>
</html>
gradle로 바꾸면 너무 느려져서요 Intellij idea 옵션은 그대로 두려고 합니다

그래서 버전을 3.1.5로 바꿨더니 아래와 같이 또뜹니다 에러가 하나 줄긴했지만 여전해요 ㅠㅜ

답변 2
5
안녕하세요. 하하님 다음을 참고해주세요 🙂
그리고 스프링 부트 3.2를 사용하시는 것을 권장합니다. 🙂
자주하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.b1yk4ued1pxo
주의! 스프링 부트 3.2 파라미터 이름 인식 문제
스프링 부트 3.2부터 자바 컴파일러에 -parameters 옵션을 넣어주어야 애노테이션의 이름을 생략할 수 있다.
발생하는 예외
java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either.
주로 다음 두 애노테이션에서 문제가 발생한다.
@RequestParam, @PathVariable
@RequestParam 관련
//애노테이션에 username이라는 이름이 명확하게 있다. 문제 없이 작동한다.
@RequestMapping("/request")
public String request(@RequestParam("username") String username) {
...
}
//애노테이션에 이름이 없다. -parameters 옵션 필요
@RequestMapping("/request")
public String request(@RequestParam String username) {
...
}
//애노테이션도 없고 이름도 없다. -parameters 옵션 필요
@RequestMapping("/request")
public String request(String username) {
...
}
@PathVariable 관련
//애노테이션에 userId라는 이름이 명확하게 있다. 문제 없이 작동한다.
public String mappingPath(@PathVariable("userId") String userId) {
...
}
//애노테이션에 이름이 없다. -parameters 옵션 필요
@RequestMapping("/request")
public String request(@RequestParam String username) {
...
}
해결 방안1(권장)
애노테이션에 이름을 생략하지 않고 다음과 같이 이름을 항상 적어준다. 이 방법을 권장한다.
@RequestParam("username") String username
@PathVariable("userId") String userId
해결 방안2
컴파일 시점에 -parameters 옵션 적용
1. IntelliJ IDEA에서 File -> Settings를 연다. (Mac은 IntelliJ IDEA -> Settings)
2. Build, Execution, Deployment → Compiler → Java Compiler로 이동한다.
3. Additional command line parameters라는 항목에 다음을 추가한다.
-parameters
4. out 폴더를 삭제하고 다시 실행한다. 꼭 out 폴더를 삭제해야 다시 컴파일이 일어난다.
해결 방안3
Gradle을 사용해서 빌드하고 실행한다.
문제 원인
참고로 이 문제는 Build, Execution, Deployment -> Build Tools -> Gradle에서
Build and run using를 IntelliJ IDEA로 선택한 경우에만 발생한다.
Gradle로 선택한 경우에는 Gradle이 컴파일 시점에 해당 옵션을 자동으로 적용해준다.
자바를 컴파일할 때 매개변수 이름을 읽을 수 있도록 남겨두어야 사용할 수 있다. 컴파일 시점에 -parameters 옵션을 사용하면 매개변수 이름을 사용할 수 있게 남겨둔다.
스프링 부트 3.2 전까지는 바이트코드를 파싱해서 매개변수 이름을 추론하려고 시도했다. 하지만 스프링 부트 3.2 부터는 이런 시도를 하지 않는다.
감사합니다.
1
안녕하세요. 하하님, 공식 서포터즈 OMG입니다.
현재 스프링부트 3.2에서 발생하는 상황의 오류가 확인되고 있습니다.
3.1.5로 변경하셨다고 하였는데 build.gradle의 변경 내역이 애플리케이션 실행에 적용되지 않은 것 같아요.
3.1.5의 경우 톰캣 코어의 버전은 10.1.15인데,

올리신 화면의 캡쳐를 보면 톰캣 코어의 버전은 10.1.16이네요
아래 캡쳐화면의 우측의
reload 버튼을 클릭하여 3.1.5가 적용될 수 있도록 reload 버튼 클릭 후 재 확인 부탁드립니다!^^

감사합니다.
servlet과 container에 대한 질문입니다
0
24
1
api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?
0
62
1
jsp 의존성 수정 요청
0
77
2
요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?
0
143
1
save() 메서드 문의
0
66
1
절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상
0
100
1
request-body-json
0
83
2
MVC 패턴의 적용 단위
0
95
1
RequestMapping을 이용한 핸들러, 어댑터
0
118
2
save 후 결과화면
0
88
2
jsp를 이용한 view
0
97
1
application.properties에 debug 추가해도 결과가 똑같습니다.
0
177
1
수업 코드 제공 관련 문의
0
97
2
RequestMappingHandlerAdapter의 Controller 호출 과정
0
99
3
파일 오픈 시
0
69
1
스프링 배치 관련
0
77
1
@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부
0
112
1
postman으로 /request-body-json-v1 호출시 500 error
0
94
1
프론트엔드와 백엔드의 mvc, rest api에 대한 질문
0
78
1
모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문
0
111
1
console log 출력 관련 질문입니다.
0
74
1
애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ
0
139
1
html 변경하는 부분 적용 문제
0
103
1
한글 깨짐
0
76
2





