Vue.js
[Vue.js] Spring Boot 게시판 만들기 (3) - 간단한 조회 기능 구현
DEV_HEO
2023. 3. 23. 16:18
320x100
게시물을 조회하는 간단한 API를 작성하고, 화면에 뿌리는 것 까지 해볼 것이다.
1. API 작성
클래스 생성
(1) BoardRepository
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.vue.test.common.entity.Board;
@Repository
public interface BoardRepository extends JpaRepository<Board, Integer> {
}
(2) BoardService
package com.vue.test.board.service;
import java.util.List;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import com.vue.test.common.entity.Board;
import com.vue.test.common.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
@Service
@EnableAsync
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
/**
* 게시판 조회
* @return List<Board>
*/
public List<Board> getBoardList(){
return boardRepository.findAll();
}
}
(3) BoardController
package com.vue.test.board.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.vue.test.board.ResultVO;
import com.vue.test.board.service.BoardService;
import lombok.RequiredArgsConstructor;
@CrossOrigin(origins = "*")
@RestController
@RequiredArgsConstructor
@RequestMapping("/board")
public class BoardController {
private static final Logger LOG = LoggerFactory.getLogger(BoardController.class);
private final BoardService boardService;
@RequestMapping(value = "get-board-list.do", method = RequestMethod.GET)
// @GetMapping("get-board-list.do") 동일한 코드
public ResultVO getBoardList() {
LOG.info("[GET] getBoardList");
ResultVO result = new ResultVO(false, null);
try {
result.setResult(boardService.getBoardList());
result.setSuccess(true);
} catch (Exception e) {
LOG.error("[Board] getBoardList : " + e.getMessage(), e);
}
return result;
}
}
CORS 오류를 방지하기 위해서
간단하게 Controller에 CrossOrigin 어노테이션 추가
@CrossOrigin(origins = "*") : 모든 url에 대해 허용하겠다는 뜻
(4) ResultVO
package com.vue.test.board;
import lombok.Data;
@Data
public class ResultVO {
boolean success;
Object result;
public ResultVO(boolean success, Object result) {
this.result = result;
this.success = false;
}
}
샘플 데이터 입력
insert into board (bno, title, content, writer, reg_date) values (1, 'title1', 'content1', 'writer1', sysdate()) ;
insert into board (bno, title, content, writer, reg_date) values (2, 'title2', 'content2', 'writer2', sysdate()) ;
insert into board (bno, title, content, writer, reg_date) values (3, 'title3', 'content3', 'writer3', sysdate()) ;
insert into board (bno, title, content, writer, reg_date) values (4, 'title4', 'content4', 'writer4', sysdate()) ;
게시물 조회 API test
크롬 주소창에
http://localhost:8081/board/get-board-list.do 를 쳐보면
다음과 같은 결과가 나온다.
2. 화면에 출력
axios를 사용할거라서 라이브러리를 설치해야 한다.
(axios : 백엔드와 HTTP 통신을 할 수 있는 의존성 라이브러리)
vue 프로젝트가 있는 폴더에서 다음 명령어를 실행한다.
> npm install axios
HelloWord.vue 파일
<template>
<div class="hello">
{{ boardList }}
</div>
</template>
<script>
import axios from "axios";
export default {
name: "HelloWorld",
data() {
return {
boardList: [],
};
},
props: {
msg: String,
},
created() {
this.getBoardList();
},
methods: {
getBoardList() {
axios
.get("http://localhost:8081/board/get-board-list.do")
.then((response) => {
if (response.data.success) {
console.log(response.data.result);
this.boardList = response.data.result;
}
})
.catch(function (error) {
console.log("error", error);
});
},
},
};
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {
margin: 40px 0 0;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
</style>
320x100