인프런 커뮤니티 질문&답변
NumberFormatException
작성
·
4K
0
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
안녕하세요. item.html 타임리프를 적용한 후 상품명을 눌러 실행해보니 아래와 같은 오류가 뜹니다.
Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "null"]
상품명을 눌러서 에러가 났고, NumberFormatExcption이 나와서 BasicItemController에서 {itemId}로 매핑하는 코드를 확인했습니다. 파라미터로 의 값을 'long'으로 받고 있었습니다. 그런데 브라우저 주소를 치니 http://localhost:8080/basic/items/null 'null'이 나왔습니다. 반환타입과 'null'은 서로 맞지 않으니 오류가 난다고 파악했습니다. 그렇다면 반 null값이 안나오게 바꿔줘야하는데 어떻게 해결 해야하는 지 잘 모르겠네요. 도움 요청합니다!

BasicItemController의 코드는 다음과 같습니다.
------------------------
@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));
}
]
---------------------
상품명에 관한 코드는 다음과 같습니다.
<div>
<label for="itemName">상품명</label>
<input type="text" id="itemName" name="itemName" class="form-control" value="상품A" th:value="${item.itemName}" readonly>
</div>
답변 2
2
저도 비슷한 오류가 떠서 계속 코드를 봤거든요!
혹시 basic/items.html 에 상품명을 타임리프로 렌더링 하는 코드에 잘못 적으신 게 아닐까요?
저 같은 경우는 이처럼 적었더니, 같은 넘버 포멧 오류가 떴어요!
<td><a href="item.html" th:href="@{|/basic/items/{item.id}|}"
그래서 다음과 같이 고쳐주었더니 되었습니다 강의를 들으며 코딩하다보니 했던 실수였어요!
<td><a href="item.html" th:href="@{|/basic/items/${item.id}|}"
0





숫자가 들어가야 할 자리에 null이 들어가서 문제가 생긴거군요. 매핑한곳에 null값이 들어갔나 확인해봤는데 첨부된 사진에 보시는 바와 같이 코드에는 이상이 없는것 같습니다...