문제점 : 회원가입시에 중복아이디에 대해서 회원가입이 되는것처럼 동작한다. 하지만 실제로 DB에는 반영이 안된다.
GlobalExceptionHandler
회원가입완료 버튼을 눌러서 오류가 발생하게 되면 GlobalExceptionHandler를 타게 된다. 그리고 500을 반환한다.
--> 500을 응답했을 경우에 대해서 분기처리를 하면 된다.
@ControllerAdvice // 어느파일에서나 Exception이 발생해도 이 함수를 타게 하기 위한 어노테이션
@RestController
public class GlobalExceptionHandler {
@ExceptionHandler(value=Exception.class)
public ResponseDto<String> handleArgumentException(Exception e) {
return new ResponseDto<String>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage()); // 500을 리턴한다.
}
}
User.js
let index = {
init: function(){
$("#btn-save").on("click",()=>{
this.save();
});
}
,save: function(){
let data = {
userName : $("#userName").val(),
password:$("#password").val(),
email:$("#email").val()
};
$.ajax({
type:"POST",
url:"/auth/joinProc",
data:JSON.stringify(data),
contentType: "application/json; charset=UTF-8",
dataType:"json"
}).done(function(resp){
if(resp.status === 500){
alert("회원가입에 실패하였습니다.")
}else{
alert("회원가입이 완료되었습니다.");
console.log(resp)
location.href="/";
}
}).fail(function(error){
alert(JSON.stringify(error));
});
}
}
index.init();
문제점 : 댓글이 있는 게시글에 대해서 삭제가 안된다.
댓글에 게시글에 대한 외래키가 걸려있는데 , 게시글을 삭제할때 댓글에 대해서 어떻게 할 건지에 대해서 정의가 안돼있어서 그렇다. Cascade 옵션을 줘야한다.
Board.java
@JsonIgnoreProperties({"board"})
@OneToMany(mappedBy = "board", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
//cascade = CascadeType.REMOVE 게시글을 지우면 댓글을 다 지우겠다
@OrderBy("id asc")
private List<Reply> replys; // 하나의 글에는 여러개의 댓글이 가능하기 때문에 List 로 가져와야된다.