티스토리 뷰
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을 발생시켜 에러를 보여준다.
'Spring Boot' 카테고리의 다른 글
SpringBoot + MariaDB 10-3 댓글 유효성 검사(@NotNull,Blank,Empty) (0) | 2023.06.15 |
---|---|
SpringBoot + MariaDB 10-2 댓글 렌더링 (@OrderBy) 삭제 (0) | 2023.06.15 |
SpringBoot + MariaDB 10-2 댓글 작성(가짜 클래스) JSON.stringify (0) | 2023.06.14 |
SpringBoot + MariaDB 10-1 댓글 모델(LAZY,EAGER 선택) (0) | 2023.06.14 |
SpringBoot + MariaDB 9-3 기타기능 유저프로필사진 변경 (0) | 2023.06.14 |