정규표현식 예외처리
회원가입 컨트롤러에서 BindingResult로 FieldError를 받아온다.
BindingResult는 검증 오류가 발생할 경우 오류 내용을 보관하는 스프링 프레임워크에서 제공하는 객체이다.
스프링은 이런 좋은 기능도 지원해준다.
아래는 내가 짠 회원가입 컨트롤러 코드다.
@PostMapping("/auth/signup")
public ApiResponseDto signupUser(@RequestBody @Valid UserRequestDto userRequestDto, BindingResult bindingResult){
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
ApiResponseDto apiResponseDto = new ApiResponseDto("계정생성", 200);
if(fieldErrors.size() > 0){ //에러검사
for(FieldError fieldError : bindingResult.getFieldErrors()){ //에러검사
apiResponseDto = new ApiResponseDto("계정규칙이 올바르지 않습니다.", 400);
log.error(apiResponseDto.getMsg(),apiResponseDto.getStatusCode()); //로그 출력
}
return apiResponseDto; //에러 api반환
}
String respone = userService.signupUser(userRequestDto);
return apiResponseDto;
}
위와같이 정규표현식으로 선언해놓은 곳에서 에러가 났을 시 BindingResult를 이용해 가져와서 처리해줄 수 있다.
좋아요
좋아요 기능 구현은 전 프로젝트 팀원이 작성한 코드를 참고했다.
Like엔티티가 유저와 Post를 들고있고, Post엔티티가 Comment리스트와 Like리스트를 들고있는 구조이다.
Like Entity.
@Getter
@Setter
@Entity
@NoArgsConstructor
@Table(name="likes")
public class Like {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; //id
@JoinColumn(name = "postId")
@ManyToOne
private Post post; //게시글
@JoinColumn(name = "userId")
@ManyToOne
private User user; //유저
public Like(Post post, User user) {
this.post = post;
this.user = user;
}
}
Post Entity에 추가한 부분
@OneToMany(mappedBy = "post", cascade = {CascadeType.REMOVE})
private List<Comment> commentList = new ArrayList<>();
@OneToMany(mappedBy = "post", cascade = {CascadeType.REMOVE})
private List<Like> LikeList = new ArrayList<>();
라이크의 갯수는 List의 size값을 가져와서 사용한다.
유저가 좋아요를 누를 때 해당 post의 id값을 받아와 post를 찾아서 Like리스트에 해당 유저와 해당 포스트를 넣고 add해준다.
취소시는 다시 눌렀을 때 해당Like를 id를 이용해 찾아서 해당 유저가 누른적이 있는지 검사하고 지워주는 메서드를 실행한다.