post 예외처리

조태진·2023년 12월 24일
0

스프링 예외처리

목록 보기
2/4

오늘은 내 블로그 엔티티를 예외처리를 해보았다

먼저 postController에서 post 메서드를 예외 처리를 해보았는데
service 클래스에 @RequestBody로 내려온 request 매개변수를 넣어주고


@PostMapping("/posts")
    public void post(@RequestBody @Valid PostCreate request) throws Exception {
        Post write = postService.write(request);
     }
public Post write(PostCreate postCreate){
        postCreate.validate();
        Post post = Post.builder().
                title(postCreate.getTitle()).
                content(postCreate.getContent()).build();
        Post save = postRepository.save(post);

        return save;
    }

postCreate.validate()로 예외처리를 해주었다
PostCreate 클래스에는

@Data
@NoArgsConstructor
public class PostCreate {
--중략
public void validate(){
      if(getTitle().contains("바보")){
          throw new InvalidRequest("title", "제목에 바보를 포함할 수 없습니다");
      }
  }

이렇게 타이틀에 "바보"라는 글자가오면 InvalidRequest로 throw를 해주었다
InvalidRequest 클래스에 가보면

@Getter
@Setter
public class InvalidRequest extends TjlogException {
    private static final String MESSAGE = "존재하지 않는 글입니다";

    public InvalidRequest(){
        super(MESSAGE);
    }

    public InvalidRequest(String fieldName,String message){
        super(MESSAGE);
        addValidation(fieldName,message);
    }

    @Override
    public int getStatusCode(){
        return 400;
    }
}

이러한 코드가있는데 먼저 extends TjlogException 를 해준이유는
InvalidRequest 예외말고도 다양한 예외들이 있을것이기 때문에
TjlogException에 abstract 클래스를 만들어서 다양한 예외 클래스들이
TjlogException를 사용할 수 있도록 해주었다.

코드 리뷰를 하자면 먼저 상수 메세지에 존재하지 않는 글입니다 라고 해주었고 생성자에는 super를 해줌으로써 TjlogException 생성자에 메세지값을 넣어주었다.
그리고 또 하나의 생성자로는

public class PostCreate {
---중략
public void validate(){
        if(getTitle().contains("바보")){
            throw new InvalidRequest("title", "제목에 바보를 포함할 수 없습니다");
        }
    }
    
  • PostCreate에있는 fieldName,Message를 매개변수에 넣어주었는데 이 변수들은 위 코드에있는 title과 message를 넣어준것이다

그리고 getStatusCode 메서드를 만들어주었는데 InvalidRequest 예외는 400에러가 발생해야 하기때문에 따로 메서드를 만들어주었다. 이렇게 만들어준 이유는 나중에 나올 코드리뷰에서 설명한다.

0개의 댓글