티스토리 뷰

ApiException이랑 Exception의 ValidationException차이는?

api는 데이터만 전달할때 사용되고

Exception은 html파일을 전달할때 발생하는 예외를 처리한다고 보면된다.

Validation 테이블생성될때 발생하는 예외이다.

코드를 살펴보면

 

ApiException

	// CustomApiException
    @ExceptionHandler(CustomApiException.class)
	public ResponseEntity<?> apiException(CustomApiException e) {
		return new ResponseEntity<>(new CMRespDto<>(-1,e.getMessage(),null),
				HttpStatus.BAD_REQUEST);
	}
    // api 함수
    @DeleteMapping("/api/comment/{id}")
	public ResponseEntity<?> commentDelete(@PathVariable int id){
		commentService.댓글삭제(id);
		return new ResponseEntity<>(new CMRespDto<>(1,"댓글삭제성공",null),HttpStatus.OK);
	}

Api일 경우 우리가 컨트롤에서 return할때 상태코드와 성공여부 메시지를 전달하여 상태코드에따른 fail또는 done로 보내기 때문에 apiException와 exception을 구분한것이다

 

그럼 html반환하는 익셉션을 살펴보자

	// exception
	@ExceptionHandler(CustomException.class)
	public String exception(CustomException e) {
		return Script.back(e.getMessage());
	}
    
    //UserService 회원프로필 안의 코드
        User userEntity = userRepository.findById(pageUserId).orElseThrow(()->{
        throw new CustomException("해당 프로필 페이지는 없는 페이지입니다.");
    });

위에선 스크립트 함수를 발생시켜 history.back시키고 해당 메시지를 alert로 보여주게된다 

 

ValidationException

생성할때 일어나는 에러를 잡아주고 Bulild와 연동하여 Build가 어디서 잘못됬는지 찾아 그것을 유저에게 보여주게되니 map형식을 사용한다

	@ExceptionHandler(CustomValidationException.class)
	public String validationException(CustomValidationException e) {
		if(e.getErrorMap() == null) {
			return Script.back(e.getMessage());
		}else {	
			return Script.back(e.getErrorMap().toString());
		}
	}

SignupDto.java

	public User toEntity() {
		return User.builder()
				.username(username)
				.password(password)
				.email(email)
				.name(name)
				.build();	
	}

AuthController.java의 회원가입 함수

	public String signup(@Valid SignupDto signupDto, BindingResult bindingResult) { // key=vaule (x-www-form-urlencoded)
		if(bindingResult.hasErrors()) {
			Map<String, String>errorMap = new HashMap<>();
			for(FieldError error : bindingResult.getFieldErrors()) {
				errorMap.put(error.getField(), error.getDefaultMessage());
			}
			throw new CustomValidationException("유효성검사 실패함",errorMap);

매개변수로 Dto에 데이터가 들어오게되면 toEntity가 발동되어 각각의 값을 넣어주고 그 과정중 에러가 있으면 bindingResult에 담기게 된다 이때 에러가있으면 ValidationException을 발생시켜 에러를 보여준다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함