Spring REST_ REST방식 댓글 기능 개발 환경 구현

dwanGim·2022년 6월 15일
0

spring_basic

목록 보기
11/41

REST 방식 댓글 기능 구현

URL부터 시작해 모든 부분을 REST 방식으로 구성해서

댓글 서비스를 구현해보겠습니다.

먼저 댓글 table을 oracle에 생성해줍니다.

댓글은 글과 무조건 연동되기 때문에 이를 감안해,

board와 외래 키를 걸어주어야 합니다.

CREATE table reply_tbl (
    rno number(10, 0) ,
    bno number(10, 0) not null,
    reply varchar2(1000) not null,
    replyer varchar2(50) not null,
    replyDate date default sysdate,
    updateDate date default sysdate
    );
    
CREATE SEQUENCE reply_num;

ALTER TABLE reply_tbl ADD CONSTRAINT pk_reply PRIMARY KEY(rno);

ALTER TABLE reply_tbl ADD CONSTRAINT fk_reply FOREIGN KEY (bno) REFERENCES board_tbl(bno);

SELECT * FROM reply_tbl;

이제 게시판 프로젝트로 이동해 댓글의 VO를 생성해줍니다.

그리고 mapper -> service 순으로 필요한 메서드, xml을 구현하고 생성합니다.


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper 
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http:/mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ict.mapper.ReplyMapper">

	<!-- Reply SQL start-->
	<select id="getList" resultType="com.ict.persistence.ReplyVO">
		SELECT * FROM reply_tbl
			WHERE bno = #{bno}
		ORDER BY rno DESC
	</select>
	
	<insert id="create">
		INSERT INTO reply_tbl
			(rno, bno, reply, replyer)
			VALUES
			(reply_num.nextval, #{bno}, #{reply}, #{replyer})
	</insert>
	
	<update id="update">
		UPDATE reply_tbl
			SET
		reply = #{reply}, updateDate = SYSDATE
			WHERE rno = #{rno}
	</update>
	
	<delete id="delete">
		DELETE FROM reply_tbl
			WHERE rno = #{rno}
	</delete>
	
	
</mapper>

이 밑은 service입니다.

package com.ict.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ict.mapper.ReplyMapper;
import com.ict.persistence.ReplyVO;

@Service
public class ReplyServiceImpl implements ReplyService{
	
	@Autowired
	private ReplyMapper mapper;

	@Override
	public void addReply(ReplyVO vo) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<ReplyVO> listReply(Long bno) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void modifyReply(ReplyVO vo) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void removeReply(Long rno) {
		// TODO Auto-generated method stub
		
	}

}


YARC 를 이용한 REST 방식 댓글 처리

컨트롤러가 기능을 사용할 수 있도록 서비스 객체를 작성합니다.

package com.ict.controller;



import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.ict.persistence.ReplyVO;
import com.ict.service.ReplyService;

@RestController
@RequestMapping("/replies")
public class ReplyController {

	@Autowired
	private ReplyService service;
	@PostMapping(value="", consumes = "application/json", produces= {MediaType.TEXT_PLAIN_VALUE})
	
	public ResponseEntity<String> register(@RequestBody ReplyVO vo) {
		
		// rest 컨트롤러에서 받는 파라미터 앞에 @RequestBody 어노테이션이 붙어야 consumes와 연결됩니다.
		// 깡통 Entity를 먼저 생성
		ResponseEntity<String> entity = null;
		
		try {
			// 먼저 글쓰기 로직 실행 후 에러가 없다면
			service.addReply(vo);
			entity = new ResponseEntity<String>("Success", HttpStatus.OK);
		} catch(Exception e) {
			// error 가 생겼을 때
			entity = new ResponseEntity<String>(e.getMessage(), HttpStatus.BAD_REQUEST);
		}
		return entity;
	}
	
	
}

consumes는 이 메서드의 파라미터를 넘겨줄 때 어떤 형식으로 넘길 지 설정합니다.

기본적으로 rest 방식에서는 json을 사용합니다.

produces는 입력받은 데이터를 토대로 로직을 실행한 다음

사용자에게 결과로 보여줄 데이터의 형식을 나타냅니다.

jsom-datebind를 추가해야 정상적으로 작동합니다.

produces에 TEXT_PLAIN_VALUE를 줬으므로, 결과 코드와 문자열을 넘기도록 합니다.

작성이 완료되었다면 컨트롤러에 대한 REST 방식을 요청하기 위해

크롬 메뉴 -> 도구 더보기 -> 확장 프로그램

클릭해서 이동합니다.

크롬 웹스토어에서 rest client 검색 후 YARC를 다운 받아 사용 가능하도록

설정합니다.

설정해둔 컨트롤러에 맞는 url을 입력 후 POST 방식으로

필요한 파라미터들을 JSON 방식으로 입력해줍니다.

200이 뜨면서 Response가 OK가 되면 완료입니다.

일단은 여기까지 입니다.

profile
배울 게 참 많네요.

3개의 댓글

comment-user-thumbnail
알 수 없음
2022년 7월 19일
수정삭제

삭제된 댓글입니다.

3개의 답글