inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Spring MVC Phần 1 - Công nghệ cốt lõi phát triển web backend

Chi tiết sản phẩm

NumberFormatException

4059

carpediem7490

26 câu hỏi đã được viết

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>

 

spring MVC

Câu trả lời 2

2

mino

저도 비슷한 오류가 떠서 계속 코드를 봤거든요!
혹시 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

David

안녕하세요. carpediem7490님, 공식 서포터즈 David입니다.

.
NumberFormatException은 숫자가 아닌 값을 숫자로 변환하려고 할 때 발생하는 예외입니다.

요청하는 주소 itemId(숫자)가 들어와야 할 파라미터 값으로 숫자가 아닌 문자가 들어와서 발생한 문제로 보입니다.

상품명의 link를 만들어줄 때 상품의 id가 숫자가 아닌 null로 들어간 것 같아요.

서버에서 상품의 id가 존재하는지 먼저 체크해주세요.

그리고 타임리프에서 id를 잘 불러오는지 체크해주세요.
.
감사합니다.

0

carpediem7490

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

0

David

1. Item 객체에 id가 있는지

2. 상품 목록을 보여주는 html에서 타임리프로 Item 객체의 id를 잘 불러오는지

2가지를 확인하셔야 합니다.

servlet과 container에 대한 질문입니다

0

24

1

api를 어느 컨트롤러에 작성해야하는지는 어떤 기준으로 해야하나요?

0

63

1

jsp 의존성 수정 요청

0

78

2

요즘 웹 서버가 주로 사용되는 이유는 SPA 구조 때문일까요 ?

0

143

1

save() 메서드 문의

0

67

1

절대 경로로 templates/basic 하위 파일 열면 css 적용 안되는 현상

0

101

1

request-body-json

0

83

2

MVC 패턴의 적용 단위

0

97

1

RequestMapping을 이용한 핸들러, 어댑터

0

119

2

save 후 결과화면

0

89

2

jsp를 이용한 view

0

97

1

application.properties에 debug 추가해도 결과가 똑같습니다.

0

178

1

수업 코드 제공 관련 문의

0

97

2

RequestMappingHandlerAdapter의 Controller 호출 과정

0

100

3

파일 오픈 시

0

70

1

스프링 배치 관련

0

77

1

@RequestParam의 defaultValue가 blank 값도 처리하는 지 여부

0

112

1

postman으로 /request-body-json-v1 호출시 500 error

0

95

1

프론트엔드와 백엔드의 mvc, rest api에 대한 질문

0

79

1

모델의 역할과 계층 분리에 대한 이해 차이 + 추가질문

0

111

1

console log 출력 관련 질문입니다.

0

75

1

애플리케이션이 실행 되지 않습니다 ㅠㅠㅠ

0

139

1

html 변경하는 부분 적용 문제

0

103

1

한글 깨짐

0

76

2