작성
·
228
0
안녕하세요 강사님 bindingresult 편 강의 잘 듣고 있다가 궁금증이 생겨서 문의 드립니다.
상품등록 폼에서 모든 필드에 값을 넣지 않고 post로 값을 전달했습니다 에러가 발생하면 스프링에서 new FieldError를 생성해 바인딩리절트에 담아서 다시 폼으로 값을 전달해주는 것으로 이해했습니다. 하지만 binding result 로그를 확인해보면 똑같이 전부 값을 주지 않았지만 itemName의 rejectedValue에만 아무값이 들어가있지않고,
price와 수량에는 null이 들어갔습니다 왜 itemName만 null조차 들어가지 않는지 알 수 있을가요?
사진 같이 첨부드립니다.
항상 감사합니다.
답변 1
2
안녕하세요. yohan.cho님, 공식 서포터즈 OMG입니다.
null과 공란의 차이는 각 필드의 타입으로 인해 발생합니다.
itemName의 경우 String 타입이기 때문에 요청파라미터로 아무 값도 입력하지 않을 경우 공란으로 매핑이 되지만,
quantity와 price는 Integer(숫자) 타입입니다.
숫자에 공란(무) 상태를 나타내기 위해 스프링에서 공란데이터를 null 로 처리한 것이고
만약 Integer 대신 int로 타입을 변경해서 확인해보시면 null 대신 0으로 되어있는 것을 보실 수 있으실텐데요
Integer는 객체 타입이여서 null로 처리가 되지만, int는 객체가 아닌 primitive(원시)타입이기 때문에 null 대신 공란(아무것도 전달받지 않은 무 상태)을 대신하기 위해 0으로 초기화 됩니다.
감사합니다.