인프런 커뮤니티 질문&답변

봉준님의 프로필 이미지
봉준

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

오류 코드와 메시지 처리6

typemismatch

작성

·

359

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

    @PostMapping("/add")
    public String addItemV4(@ModelAttribute Item item, BindingResult bindingResult , RedirectAttributes redirectAttributes, Model model) {
        //파라미터 순서 중요
       /* ValidationUtils.rejectIfEmptyOrWhitespace(bindingResult, "itemName", "required");*/
        //검증로직
        if (bindingResult.hasErrors()) {
            log.info("errors={}", bindingResult);
            return "validation/v2/addForm";
        }

        log.info("objectName={}", bindingResult.getObjectName());
        log.info("target={}", bindingResult.getTarget());
        if (!StringUtils.hasText(item.getItemName())) {
            /* errors.put("itemName", "상품이름값은 필수입니다.");*//*
/*
            bindingResult.addError(new FieldError("item", "itemName",item.getItemName(),false,new String[]{"required.item.itemName"},null, "상품이름은 필수입니다"));
*/
            bindingResult.rejectValue("item", "required");

        }
        if (item.getPrice() == null || item.getPrice() > 1000000 || item.getPrice() < 1000) {
            /* errors.put("price", "가격은 1000부터 100000까지만 입력하세요");*/
/*
            bindingResult.addError(new FieldError("item", "price",item.getPrice(),false,new String[]{"range.item.price"},new Object[]{100,1000000}, "가격은 1000부터 100000까지만 입력하세요"));
*/
            bindingResult.rejectValue("price", "range", new Object[]{1000, 10000000}, null);

        }
        if (item.getQuantity() == null || item.getQuantity() >= 9999) {
            /* errors.put("quantity", "수량은 9999이하만 입력가능합니다");*/
/*
            bindingResult.addError(new FieldError("item", "quantity",item.getQuantity(),false,new String[]{"max.item.quantity"},new Object[]{9999}, "상품이름은 필수입니다"));
*/
            bindingResult.rejectValue("quantity", "max", new Object[]{9999}, null);
        }
        //특정 필드가 아닌 복합 필드 값 검증
        if (item.getPrice() != null && item.getQuantity() != null) {
            int resultPrice = item.getPrice() * item.getQuantity();
            if (resultPrice < 10000) {
                /*errors.put("globalErrors", "수량과 값의 합이 10000이상 이어야합니다. 현재 값은 = " + resultPrice);*/
/*
                bindingResult.addError(new ObjectError("item",new String[]{"totalPriceMin"},null, "수량과 값의 합이 10000이상 이어야합니다. 현재 값은 = " + resultPrice));
*/
                bindingResult.reject("totalPriceMin", new Object[]{10000, resultPrice}, null);

            }
        }
#required.item.itemName=상품 이름은 필수입니다.
#range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
#max.item.quantity=수량은 최대 {0} 까지 허용합니다.
#totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}

#==ObjectError==
#Level1
totalPriceMin.item=상품의 가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1}

#Level2 - 생략
totalPriceMin=전체 가격은 {0}원 이상이어야 합니다. 현재 값 = {1}

#==FieldError==
#Level1
required.item.itemName=상품 이름은 필수입니다.
range.item.price=가격은 {0} ~ {1} 까지 허용합니다.
max.item.quantity=수량은 최대 {0} 까지 허용합니다.

#Level2 - 생략

#Level3
required.java.lang.String = 필수 문자입니다.
required.java.lang.Integer = 필수 숫자입니다.
min.java.lang.String = {0} 이상의 문자를 입력해주세요.
min.java.lang.Integer = {0} 이상의 숫자를 입력해주세요.
range.java.lang.String = {0} ~ {1} 까지의 문자를 입력해주세요.
range.java.lang.Integer = {0} ~ {1} 까지의 숫자를 입력해주세요.
max.java.lang.String = {0} 까지의 문자를 허용합니다.
max.java.lang.Integer = {0} 까지의 숫자를 허용합니다.

#Level4
required = 필수 값 입니다.
min= {0} 이상이어야 합니다.
range= {0} ~ {1} 범위를 허용합니다.
max= {0} 까지 허용합니다.

typeMismatch.java.lang.Integer=숫자를 입력해주세요.
typeMismatch=타입 오류입니다.

이렇게 따라했는데스크린샷 2024-01-01 오후 4.30.38.png이런식으로 가격에 오류코드가 안뜨고 화이트라벨오류가 뜹니다 뭐가 문제인가요??타입미스매치를 에러프로퍼티에 명시해놨는데도 안됩니다ㅠ

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 봉준님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

image

액세스 권한이 출력되지 않도록 링크있는 사용자에게 권한 설정을 해주세요 😀

자주하는 질문에 설명이 나와있습니다^^

0

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 유사한 문제를 해결하는 과정이 담긴 게시글이 있어 링크를 공유드립니다.
해당 게시글에서는 가격 입력 시 “qq”와 같이 잘못된 문자열이 입력되었을 때 발생하는 FieldError에 대한 설명과 함께 typeMismatch 오류에 대한 이해를 돕는 답변이 제공되어 있습니다.
이를 통해 typeMismatch 오류가 발생하는 과정과 이에 대한 처리 방법에 대해 확인하실 수 있을 것입니다.

강의 내용을 충실히 따라해 보시고, 추가적인 문제가 발생했을 때는 게시글의 내용을 참고하여 문제 해결에 도움을 받으실 수 있습니다.
도움이 필요하시면 언제든 질문해 주세요. 감사합니다.

봉준님의 프로필 이미지
봉준

작성한 질문수

질문하기