댓글 기능 구현하기 순서
1. 댓글 모델 (Model) 설계: 댓글의 데이터를 담을 댓글 모델(DTO)을 정의. 댓글의 내용, 작성자, 작성일자 등을 포함.
2. 댓글 컨트롤러 (Controller) 작성: 댓글과 관련된 요청을 처리할 댓글 컨트롤러를 작성합니다. 댓글 작성, 조회, 수정, 삭제 등의 기능을 처리하는 메서드를 구현.
3. 댓글 매퍼 (Mapper) 작성: 댓글 데이터를 데이터베이스와 연동하기 위한 댓글 매퍼를 작성. MyBatis를 사용하여 데이터베이스와의 상호 작용을 담당하는 SQL 쿼리를 작성.
4. 댓글 DAO (Data Access Object) 작성: 댓글 매퍼와 컨트롤러 사이에서 데이터 액세스를 처리하기 위한 댓글 DAO를 작성. 댓글 매퍼와의 연결 및 데이터 액세스 메서드를 구현.
5. 댓글 서비스 (Service) 작성: 댓글 관련 비즈니스 로직을 처리하기 위한 댓글 서비스를 작성. 댓글 작성, 조회, 수정, 삭제 등의 기능을 구현하고, 필요에 따라 트랜잭션 관리 등을 처리.
6. 뷰 (View) 작성: 사용자에게 댓글을 보여주기 위한 뷰 템플릿을 작성합니다. 댓글 목록을 출력하는 템플릿, 댓글 작성 폼, 댓글 수정 폼 등을 작성.
5/23
댓글 기능을 구현 중인데 장애물을 만났다. 로그인하지 않은 상태로 댓글을 달면 로그인 화면으로 이동하도록 만드는데 계속 error 팝업창만 나온다.
@PostMapping("/comments/{post_id}")
public String createComment(@PathVariable("post_id") Integer post_id, @RequestBody CommentDTO commentDTO, HttpSession session) {
MemberDto member = (MemberDto) session.getAttribute("member");
if (member != null) {
String user_email = member.getUser_email();
if (user_email != null) {
commentDTO.setUser_email(user_email);
try {
if (comuService.comment(commentDTO) == 1) {
return "redirect:/login"; // 로그인 화면으로 리다이렉트
} else {
return "Failed to create comment";
}
} catch (Exception e) {
e.printStackTrace();
return "Failed to create comment";
}
}
}
return null;
}
오류 :
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: org.postgresql.util.PSQLException: ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
Detail: Failing row contains (6, 6, null, 2023-05-23, null).
### The error may exist in file [C:\workspace-spring\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\TeamProject\WEB-INF\classes\mapper\ComuMapper.xml]
### The error may involve com.earth.mapper.ComuMapper.comment-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO tb_comment (cmt_content) VALUES(?)
### Cause: org.postgresql.util.PSQLException: ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
Detail: Failing row contains (6, 6, null, 2023-05-23, null).
; ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
Detail: Failing row contains (6, 6, null, 2023-05-23, null).; nested exception is org.postgresql.util.PSQLException: ERROR: null value in column "cmt_content" of relation "tb_comment" violates not-null constraint
Detail: Failing row contains (6, 6, null, 2023-05-23, null).
해당 오류는 데이터베이스 업데이트 중에 tb_comment 테이블의 cmt_content 열에 대한 NOT NULL 제약 조건을 위반했음을 나타냅니다. 오류 메시지에 따르면 Failing row contains (6, 6, null, 2023-05-23, null)라고 나와있는데, cmt_content 열의 값이 null로 입력되어 발생한 것 같습니다.
문제를 해결하기 위해 다음 단계를 수행할 수 있습니다:
- CommentDTO 객체에 대한 데이터 유효성 검사를 수행하고, cmt_content 필드가 null인 경우에 대한 처리를 추가해야 합니다. 예를 들어, cmt_content가 null인 경우에 기본값이나 빈 문자열로 설정하거나, 사용자로부터 반드시 입력받도록 유효성 검사를 추가할 수 있습니다.
- 데이터베이스 스키마를 확인하여 tb_comment 테이블의 cmt_content 열이 NOT NULL 제약 조건으로 설정되어 있는지 확인해야 합니다. 만약 제약 조건을 변경하거나 해제해야 하는 경우, 데이터베이스 관리 도구를 사용하여 해당 변경을 수행해야 합니다.
- ComuMapper.xml 파일을 확인해야 합니다. 해당 파일에서 comment 쿼리에 대한 매핑이 제대로 이루어졌는지 확인하고, 매핑된 SQL 쿼리에서 cmt_content 필드가 올바르게 설정되었는지 확인해야 합니다. 필요에 따라 SQL 쿼리를 수정하여 cmt_content 필드가 null이 아닌 값을 가지도록 할 수 있습니다.
이리저리 고쳐봤지만 소용이 없다. 잠이 너무와서 내일 다시 도전해야겠다.
'코딩 학원(국비지원) > 코딩 팀프로젝트' 카테고리의 다른 글
[팀프로젝트] 게시판 만들기 진행 상황 및 보완점 (3) | 2023.06.08 |
---|---|
게시판 글쓰기 버튼 클릭 시 로그인 체크하기. (2) | 2023.06.04 |
79일차 코딩학원 (게시판 만들기 발표) (1) | 2023.05.12 |
팀프로젝트 게시판을 만들어보자. (0) | 2023.05.04 |
javascript 토글(toggle) 기능 추가 (0) | 2023.04.25 |