본문 바로가기
프로젝트

[도파민 프로젝트]개발일지 220818

by eunoo 2022. 8. 18.

[오늘의 공부]

1. 스프링의 정석 - @ExceptionHandler 강의 듣고 정리

 

[오늘 한 일 & 알게된 것]

1. 회원가입 - Validator로 검증 후, 검증 실패 시 ajax로 에러 메세지 출력하기

 

@RequestBody 가 @Valid 보다 먼저 작동해서 Date 타입인 btdt를 입력받을 때, 매핑이 되지않아 InvalidFormatException 이 발생했다. 

해결방법>> btdt를 String으로 바꿔주자. DB에서도 VARCHAR타입으로.

 

에러 메세지를 어떻게 응답할 것인가.  join 메서드에서는 두 가지의 리턴값이 있다.

검증 실패 시 map에 key는 에러 코드, value는 에러 메세지를 담아 리턴.

검증 성공 시 "success_join"을 반환

 

해결 방법>> 검증 실패 시 예외를 발생시키자! - 그래서 UserValidatorException이란 예외 클래스를 만들고, 거기에 BindingResult를 담는다.

예외가 발생하면 @ExceptionHandler로 던져주고, 거기서 {"필드 이름": "에러메세지"}를 담은 Map을 응답한다.

public class UserValidatorException extends Exception{
    private Map error_msg = new HashMap();

    public UserValidatorException(BindingResult result, String msg){
        super(msg);
        for (FieldError fieldError : result.getFieldErrors()) {
            error_msg.put(fieldError.getField(),fieldError.getDefaultMessage());
        }
    }
    public Map getError_msg() {
        return error_msg;
    }
}
@ExceptionHandler(UserValidatorException.class)
@ResponseBody
public Map catcher1(UserValidatorException ve) {
	//{"필드이름" : "에러 메세지",...}
    return ve.getError_msg();
}

 

댓글