본문 바로가기
웹서비스 개발/Spring Rest API

DB의 Board 생성 API 작성

by 후닝훈 2021. 5. 12.
반응형

Request와 Response 시 json으로 데이터를 주고받게 되는데 자바에는 json 데이터 타입을 지원하지 않는다.

따라서 json과 매핑할 수 있는 객체를 생성해야 하는데 그것을 DTO, VO라고 한다.

DTO : Data Transfer Object

VO : Virtual Object

json과 java의 객체간의 매핑을 위한 jackson mapper 라는 써드파티 라이브러리가 필요하다.

따라서 보드 테이블의 데이터를 저장할 VO객체를 생성해야 한다.

BoardVO

Domain 디렉토리와 BoardVO 객체를 생성한다.

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
 
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class BoardVO {
    private Integer id;
    private String title;
    private String content;
    private String created;
    private String updated;
}

@JsonInclude(JsonInclude.Include.NON_NULL) : not_null 인 경우만 포함한다는 의미. json을 만들때 property가 null이면 만들지 않는다.

@Data : lombok에서 제공해주는 어노테이션.  setter 와 getter를 자동으로 생성해줌.

ResultVO

insert, update 시의 쿼리 결과만을 리턴하기 위한 객체를 추가한다.

import lombok.AllArgsConstructor;
import lombok.Data;
 
@AllArgsConstructor
@Data
public class ResultVO {
    private Integer code;
    private String message;
}

@AllArgsConstructor : 모든 프라퍼티를 포함한 생성자를 생성해준다. 인스턴스를 생성시 new ResultVO(0, “success”); 이렇게 사용할 수가 있게 됨.

Persistence 레이어 생성

Control 레이어에서 request를 받은 다음에 바로 응답을 주는것이 아니라 DB를 조회해야 하므로 DB 처리를 담당할 persistence 레이어를 생성해야 한다.Persistence 디렉토리를 생성하고 BoardMapper interface를 생성해야 한다.

import com.sanghun.fullstack.domain.BoardVO;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
 
@Mapper
public interface BoardMapper {
    @Insert({"<script>",
            "INSERT INTO board(title, content)",
            "VALUES(#{title}, #{content})",
            "</script>"})
    int insertBoard(BoardVO boardVO);
}

 

insertBoard 메소드 : 입력을 객체로 받고 출력은 int로 리턴하는 매소드이다. 입력이 성공하면 1이 리턴되고 실패하면 0이 리턴된다.

xml 구문없이 자바에서  MyBatis 구문을 사용하기 위해서는 <script> 태그를 사용해야 한다.

@Mapper : 사용하게 되면 스프링이 구동시 해당 인터페이스가 인스턴스로 스프링에 등록되게 된다. 문법적으로 인터페이스가 인스턴스를 생성하는게 맞지 않지만 내부적으로 익명클래스 인스턴스로 생성이 된다고 이해된다.

Controller 생성

입력을 처리할 Controller를 생성.

@RequiredArgsConstructor
@RestController
@RequestMapping("/api")
public class BoardController {
    private final BoardMapper boardMapper;

    @PostMapping("/board")
    public ResultVO addBoard(@RequestBody BoardVO boardVO) {
        int result = boardMapper.insertBoard(boardVO);
        if (result > 0) {
            return new ResultVO(0, "success");
        } else {
            return new ResultVO(100, "fail");
        }
    }
}

@RequiredArgsConstructor : 생성자 주입. boardMapper를 final로 만들어야 한다.

@Autowired로 주입 받게될 경우 상호 의존성 에러가 발생할 수 있다.

- board 테이블을 생성할것이므로 post 매핑을 사용.

- RestController 바로 아래에 /api가 매핑되어있으므로 매핑 URL은 /api/board

- 요청은 Json으로 받고 결과는 ResultVO 타입의 json을 리턴.

반응형

'웹서비스 개발 > Spring Rest API' 카테고리의 다른 글

Board 수정 API  (0) 2021.05.20
Board 목록 보기, 상세보기 API  (0) 2021.05.13
Spring과 DB연동  (0) 2021.05.11
Get, Post 사용하기  (0) 2021.04.17
웹기능, 정적 리소스 추가하기  (0) 2021.04.16

댓글