오늘은 내 블로그 엔티티를 예외처리를 해보았다
먼저 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", "제목에 바보를 포함할 수 없습니다");
}
}
그리고 getStatusCode 메서드를 만들어주었는데 InvalidRequest 예외는 400에러가 발생해야 하기때문에 따로 메서드를 만들어주었다. 이렇게 만들어준 이유는 나중에 나올 코드리뷰에서 설명한다.