날아라쩡글이의 블로그입니다.
vue.js와 springboot AJAX로 전송하기 본문
중앙 HTA (2106기) story/spring java framwork story
vue.js와 springboot AJAX로 전송하기
날아라쩡글이 2022. 1. 14. 00:19728x90
반응형
spring에서 @RestController로 JSON을 받았고 AJAX통신으로 vue.js에서 받을 예정이다.
- vue.js에서 npm -save install axios 설치 -->통신담당객체
- package에 JSON에 axios가 추가된걸 확인할 수 있다.
- 서버와 통신하는 vue객체 만들기 : Service라고 되어있다.
- service폴더 생성하기
- BookService 파일 생성
- axios를 import한다
- import axios from "axios";
- axios를 초기화하기 그리고 반복적인 코딩은 싫으니까 http 상수 객체에 담아둔다.
- const http = axios.create({ //초기화하고 담는다.
baseURL: 'http://localhost:8081/api', //기본적으로 받아올 경로
withCredentials:false,//내인증은 안보낸다.
headers :{
Accept:'application/json',//응답컨텐츠 타입
'Content-Type:'appliction/json' //요청컨텐츠 타입
}
}); - export default{ //내보내다.
getAllBook(){ //이메소드를 호출하면 return값 요청
return http.get('/book');//get방식으로 book경로를 호출했다.
//총 http://localhost:8081/api/book으로호출된다. 응답컨텐츠 타입처럼
}
} - list가받아서 처리를 해야하는데 부모는 정보를 보낼 수 있고, 자식은 이벤트 정보만 보낼 수 있다.
- 부모에게 가서 정보를 뿌려야한다는 말이다. list에게 보내기 위해서
- 보낸다.
- 이 컴포넌트에서 사용하는 공통기능(서비스)가 구현된 객체를 import한다.
import BookService from '../service/BookService'; - export defult{} //내부에 적고 return해줘야 보낼 수 있다.
- export defult{
name:"BookList" //name은 이 컴포넌트의 이름을 지정한다.
components: //이 컴포넌트가 사용하는 자식 컴포넌트를 지정한다.
{serchForm, List, Pagination}, //자식들
data(){ //바로 연결지어서 data()작성한다. 자식에게 전달하기 위해서 책정보를 전달한다.
return {
books:[]//담을 변수를 지정 []-> 배열
},//return뒤에 바로 적는다.
created(){//서버와 통신해서 컴포넌트의 초기 데이터를 가져오는 작업을 수행하기 적절한 라이프 사이클 메소드다.
//vue컴포넌트의 라이프스타일 메소드이다. vue컴포넌트 객체가 생성되었고, data에 접근할 수 있지만, 아직 화면에 뿌려지지 않았다.
BookService.getAllBooks() //http연결 메소드 실행
.then(response =>this.books = response.data)
//response function을 실행해서 response.data에 객체가 저장 그리고 this.books에 저장한다.
//위에 적은 담을 변수 지정한 부분
.catch(error => console.log(error))//에러시 console에 뜨게
.then(() => console.log('서버로 부터 응답이 왔다.')) //무조건 한번실행되는 then메소드
}
}
}
- 이 컴포넌트에서 사용하는 공통기능(서비스)가 구현된 객체를 import한다.
- 보내준다.
- template으로 간다
- 해당 엘리먼트에 <List /> -> <List:bookList="books">
- bookList="books"
- :booklist는 list컴포넌트(자식컴포넌트)에게 부모컴포넌트가 전달해줄 데이터를 전달받은 props의 이름이다.
- books는 이 컴포넌트가 자식 컴포넌트에게 전달할 데이터가 저장된 프로퍼티이다.
- property -> props로 전달한다.
- bookList="books"
- 자식 컴포넌트에서 꺼내준다.
- scrpit에서 먼저 꺼내준다.
- export default{
name:"List"//해당 컴포넌트이름
props:["bookList"]//부모에서 담았던 이름으로 꺼내준다.
} - 해당 tr에서 v-for로 꺼내준다.
- <tr v-for="book in bookList" :key="book.no">
데이터를 사용할때는 쌍괄호를 사용한다.
- <tr v-for="book in bookList" :key="book.no">
- const http = axios.create({ //초기화하고 담는다.
axios
- axios는 서버와 HTTP통신을 지원하는 라이브러리이다.
- axios의 주요 API
- axios.get(url) //get방식 요청을 서버로 보낸다. 데이터 조회
- axios.post(url, data)//post방식 요청을 서버로 보낸다. 데이터 추가
- axios.put(url,data) //put방식 요청을 서버로 보낸다. 데이터 변경
- axios.delete(url) //delete의 방식요청을 서버로 보낸다. 데이터 삭제
- 위의 메소드를 실행하면 .then(콜백) .catch(콜백) .then(콜백) 메소드를 포함하고 있는 객체가 반환된다.
메소드 체이닝이 되는 것이다. - .then(function(response){...})
.catch(function(error){...})
.then(function()) 메소드를 포함하고 있는 (Promise 객체)가 반환된다.
- axios의 요청 처리하기
- axios.get(url) //url로 요청하면 then을 사용할 수 있다.
.then(function(response){
//성공적인 응답 핸들링
})
.catch(function(error) {
//에러 응답 핸들링
})
.then(function(){
//항상 실행되는 영역
}) - response
{
data: {}, //서버가 제공하는 응답데이터
status: 200, //HTTP 응답코드 //우리는 데이터밖에 신경쓰지 않는다.
statusText:"OK",//HTTP 상태 메세지
headers:{}, //응답 헤더 정보
config:{}, //요청할 때 axois가 사용한 구성정보
request:{} //이번 응답에 대한 요청정보, web에서 XMLHttpRequest다.
}
- axios.get(url) //url로 요청하면 then을 사용할 수 있다.
springboot에서 @CrossOrigin(origins= "*")을 붙이는 이유
교차 출처 처리 리소스 공유(Cross Origin resource sharing : CORS) 이다. 해킹을 막기 위해서이다.
웹상의 리소스(자원, 데이터)를 최초 자원이 된 서비스된 도메인(출처, origin)밖의 다른 도메인(출처, origin)으로부터 요청을 허용할 수 있는 것이다. resource제공측에서 허용을 해줘야한다.
Controller에서 설정을 해야 허용이 된다.
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
spring boot와 vue.js 설치하기 (0) | 2022.01.18 |
---|---|
springboot insert시키기 (0) | 2022.01.16 |
springboot사용, 설정하기 (0) | 2022.01.13 |
AOP만들기 (0) | 2022.01.12 |
AOP(Aspect Oriented Programming) (0) | 2022.01.11 |
Comments