- 게시글 작성 API
- 제목, 작성자명, 비밀번호, 작성 내용을 저장하고
- 저장된 게시글을 Client 로 반환하기
- 선택한 게시글 조회 API
- 선택한 게시글의 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기
(검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)- 선택한 게시글 수정 API
- 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
- 제목, 작성자명, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
@RestController
@RequiredArgsConstructor //BoardService에 대한 멤버 사용
@RequestMapping("/api/boards")
public class BoardController {
private final BoardWriteService boardWriteService;
private final BoardService boardService;
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<BoardList> registOnePost(@RequestBody BoardList list){
if (boardWriteService.registPost(list).getSeqNo() > 0) {
System.out.println("Your Post Number is "+ list.getSeqNo());
return ResponseEntity.status(HttpStatus.CREATED).body(list);
} else if(boardWriteService.registPost(list).getRegId() == ""){ //등록자 누락
return (ResponseEntity<BoardList>) ResponseEntity.status(-10);
}
else if(boardWriteService.registPost(list).getPassword() == ""){ //비밀번호 누락
return (ResponseEntity<BoardList>) ResponseEntity.status(-11);
}
else{
return(ResponseEntity<BoardList>) ResponseEntity.badRequest();
}
}
}
@Service
public class BoardWriteService {
private final BoardListRepository boardListRepository;
public BoardWriteService(BoardListRepository boardListRepository) {
this.boardListRepository = boardListRepository;
}
/***
* 게시글 등록
* 작성 내용 저장 후 게시글 Client로 반환(게시물 번호 반환하기)
*/
public BoardList registPost(BoardList post)
{
DateFormat now = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
post.setRegDate(now.format(new Date()));
post.setUseYn("Y");
return boardListRepository.save(post);
}
}
작성에 관한 내용 Create/Update는 BoardWriteService로 따로 뺐다.
이후 유지보수가 편할 것 같고 작성에 관한 메서드(제약조건같은것..) 한번에 모아두기 위해서.
DateFormat now = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
작성 날짜를 실시간으로 받아오기 위해 DateFormat를 사용하였다.
처음에 이 포맷이 이상하게 (2024-09-01 000:00:00) 이런식으로 들어가서 애좀 먹었는데 DateFormat의 대소문자(YYYY, MM, dd, HH, mm, ss)에 따라 달라지더라..
혹시나 포맷오류가 난다면 대소문자 확인 해 볼것.
@Repository
public interface BoardListRepository extends JpaRepository<BoardList, String> {
BoardList findBySeqNo(Integer seqNo);
}
작성 된 게시물을 반환해야 하므로 등록시엔 seq_no를 반환하고 반환된 seq_no로 게시물 하나를 조회 해 온다.

postman으로 json으로 데이터 전송하여 201 결과를 반환하는 것을 확인할 수 있었다.
메서드 명을 editPost로 할까 하다가.. CURD 기능 구현이니 update로 가기로 함.
//게시글 수정
@PutMapping("/post/{seq_no}")
public ResponseEntity<?> updatePost(@PathVariable("seq_no") Integer seq_no, @RequestBody BoardList list){
BoardList editedPost = boardWriteService.editPost(list, seq_no);
if(editedPost != null)
return ResponseEntity.ok(editedPost);
else
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ReturnCodes.PASSWORD_NOT_CORRECT);
}
이번엔 POST가 아닌 PUT로 매핑해준다.
파라미터로 seq_no를 전달해 주고 @PathVariable어노테이션을 사용한다.
@PathVariable
/**
* 선택한 게시글 수정.
* 수정 요청 시 수정할 데이터와 비밀번호 같이 보내서 서버에서 비밀번호 일치여부 확인 후
* 제목, 작성자명, 작성내용을 수정하고 수정된 게시글 Client로 반환
* */
public BoardList editPost(BoardList post, Integer seq_no){
DateFormat now = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String password = boardListRepository.findBySeqNo(seq_no).get().getPassword();
if(CheckPassword(post.getPassword(), password)) {
post.setSeqNo(seq_no);
post.setEditDate(now.format(new Date()));
post.setEditId(post.getEditId());
post.setUseYn("Y");
return boardListRepository.save(post);
}
else
return null;
}
private Boolean CheckPassword(String edit_password, String password){
return (edit_password.equals(password));
}
등록되어있는 password와 수정 시 입력한 password가 동일한지 확인하기 위해 CheckPassword 메서드를 생성하였다.
자꾸 동일한 비밀번호임에도 실패가 떠서 확인해 보니 string 비교는 .equals를 써야하는 것을 자꾸 까먹는다 ㅠㅠ 신경쓰자!

//게시물 단건 조회
@GetMapping(value = "/post/{seq_no}")
public ResponseEntity<?> getPost(@PathVariable("seq_no") Integer seq_no){
BoardList post = boardService.getPost(seq_no);
if(post != null)
return ResponseEntity.ok(post);
else
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ReturnCodes.POST_NOT_FOUND);
}
단건 조회는 @GetMapping으로 가져온다.
파라미터로 seq_no를 전달해 주고 @PathVariable어노테이션을 사용한다.
게시물 번호가 없거나, 있음에도 use_yn = 'N'인 경우 실패를 반환한다.
/**
* 게시글 단건 조회
* */
public BoardList getPost(Integer seq_no){
Optional<BoardList> boardListOptional = boardListRepository.findBySeqNo(seq_no);
return boardListOptional.orElseThrow(()-> new NoSuchElementException("Post not found"));
}
