티스토리 뷰
get: axios.get(url[, config])
post: axios.post(url[, data[, config]])
patch: axios.patch(url[, data[, config]])
delete: axios.delete(url[, config])
여기서 일단 get과 post 연습을 해보았다. 간단히 console창에 찍어볼 예정이다!
npm axios 설치
npm install --save axios
Spring boot 의 FriendwithLombok.java
package com.example.demo.model;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class FriendwithLombok {
private String id;
private String name;
private Void getId;
private Void getName;
private Void setId;
private Void setName;
public FriendwithLombok(String id, String name)
{
this.id = id;
this.name = name;
}
}
Friend 클래스를 미리 만들어두었다. Lombok 연습을 위해 만든 클래스이다.
아래 코드는 lombok을 사용하지 않은 Friend 클래스이다. lombok 관련 내용은 또 다른 글로 정리할 것이다!
package com.example.demo.model;
public class Friend {
private String id;
private String name;
public Friend(String id, String name)
{
this.id = id;
this.name = name;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Spring boot 의 FriendsController.java
package com.example.demo.api;
import java.util.ArrayList;
import java.util.List;
import com.example.demo.model.FriendwithLombok;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
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;
@RestController
@RequestMapping("/api/twitter")
public class FriendsController {
private List<FriendwithLombok> friends;
public FriendsController() {
friends = new ArrayList<>();
friends.add(new FriendwithLombok("nicoll", "Stepane Nicoll"));
friends.add(new FriendwithLombok("woojung", "Jeon Woojung"));
}
@GetMapping("/")
public List<FriendwithLombok> list() {
return friends;
}
@GetMapping("/{id}")
public FriendwithLombok get(@PathVariable String id) {
return friends.stream().filter(f -> id.equals(f.getId())).findAny().orElse(null);
}
@PostMapping("/post")
public String PostTest(@RequestBody String msg) {
return "post success!!!"+msg;
}
}
Get 주소 매핑 시에는 @GetMapping이 쓰이고, Post 주소 매핑 시에는 @PostMapping이 쓰인다.
@RestController 는 Rest api 통신을 위한 어노테이션으로, @Controller에 @ResponseBody가 결합된 어노테이션이다.
즉 컨트롤러 클래스에 @RestController를 붙이면, 컨트롤러 클래스 하위 메서드에 @ResponseBody 어노테이션을 붙이지 않아도 문자열과 JSON 등을 전송할 수 있다.
@RequestMapping은 요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션이다.
어노테이션 관련 내용도 더 공부가 필요하다.
@RestController
@RequestMapping("/api/twitter")
이제 FriendsController 클래스 부분을 보자.
private List<FriendwithLombok> friends;
앞에서 만들어둔 FriendwithLombok 또는 Friend 클래스로 이루어진 List인 friends를 선언한다.
public FriendsController() {
friends = new ArrayList<>();
friends.add(new FriendwithLombok("nicoll", "Stepane Nicoll"));
friends.add(new FriendwithLombok("woojung", "Jeon Woojung"));
}
friends에 객체 두개를 추가한다.
@GetMapping("/")
public List<FriendwithLombok> list() {
return friends;
}
@GetMapping("/{id}")
public FriendwithLombok get(@PathVariable String id) {
return friends.stream().filter(f -> id.equals(f.getId())).findAny().orElse(null);
}
@GetMapping 어노테이션으로 두 가지 함수를 작성했다.
하나는 friends 리스트를 반환하는 함수,
또 하나는 url에 특정 id값이 들어왔을 때 해당 id를 갖고 있는 객체 내용을 반환하는 함수
@PostMapping("/post")
public String PostTest(@RequestBody String msg) {
return "post success!!!"+msg;
}
post를 할 때는 @PostMapping 어노테이션을 사용한다.
나는 RequestBody로 문자열을 받을 예정이다. (get할 때는 ResponseBody, post할 때는 RequestBody)
성공적인 post로 msg를 받게 되면 post success!!! {msg내용}이 리턴된다.
Vue의 Test.vue
<template>
<div class="test">
<h1>This is a Test page. </h1>
<div id="demo">
<button @click="submitBtn()">post하기</button>
</div>
</div>
</template>
<script>
export default {
data() {},
mounted() {
this.load();
},
methods: {
load() {
this.axios.get('/api/twitter/').then(res => {
console.log(res.data);
});
},
submitBtn() {
this.$axios.post('/api/twitter/post', "this is string").then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
}
}
}
</script>
test.vue 창이 로드 되자마자 /api/twitter/ 의 데이터를 get해오도록 하였고, [post하기] 버튼을 누르면 /api/twitter/post으로 "this is string"이라는 문자열을 post를 하도록 하였다.
axios.get(url[, config])
this.axios.get('/api/twitter/').then(res => {
console.log(res.data);
});
get 은 서버의 데이터를 가져오는 역할이다.
/api/tiwtter/의 데이터를 가져와서 콘솔창에 찍어준다.
이때 api/twitter/nicoll 과 같이 파라미터 정보를 입력하여 정보를 얻어올 수도 있다.
또는 axios 메소드의 두 번째 인자인 config 객체로 요청값을 넘길 수 있다. 이 부분은 프로젝트 진행하면서 더 다룰 것이다!
axios.post(url[, data[, config]])
this.$axios.post('/api/twitter/post', "this is string").then(res => {
console.log(res);
}).catch(err => {
console.log(err);
});
post는 프론트의 값을 서버로 넘기는 역할을 수행한다.
아래 코드는 /api/twitter/post 에 "this is string"이라는 문자열을 넘긴다.
post 성공 시 response를 콘솔에 찍고 실패한다면 err코드를 찍어준다.
결과 화면 (콘솔창)
http://localhost:8081/test
(나는 vue의 포트번호를 8081, 스프링부트 서버를 8080으로 설정했다.)
test.vue을 띄우자마자 get해오는 것을 확인할 수 있다. friends 리스트에 있던 Friend의 두 객체를 받아온다.
[post하기] 버튼을 누르면 오른쪽 콘솔창에 'post success!!!this+is+string' 이라는 메세지가 출력된다. 상태코드도 200이라고 뜨면서 통신이 잘 된 것을 확인할 수 있다.
참고 자료
api/twitter/ 와 api/twitter/{id} 관련 부분은 이 영상을 보면서 이해했다.
https://www.youtube.com/watch?v=uyWnq5RDVwY&t=1304s
vue.js에서 axios 를 사용한 서버 통신 https://uxgjs.tistory.com/138
'프로그래밍 > Spring Boot' 카테고리의 다른 글
[Spring boot] PostgreSQL 연동 (build.gradle, application.yml) (0) | 2021.09.23 |
---|---|
Spring Boot + Vue.js 연동하기 (vscode) (0) | 2021.09.16 |
스프링부트 lombok 사용법 정리 (vscode) (0) | 2021.09.16 |
- Total
- Today
- Yesterday
- partyrock무료
- 술자리병돌리기게임
- ChatGPT
- genaiapp
- partyrock앱
- React native 작동 원리
- 백준
- easycode chatGPT
- S3 403 forbidden
- 정적 웹사이트 배포
- 병돌리기구현
- 정적 웹페이지 배포
- awsgenai
- aws생성형ai
- partyrock생성
- 코딩테스트
- SpacewBetween
- AWSBedrock
- PYTHON
- vscode easycode
- S3배포
- easycode
- 알고리즘
- partyrock
- partyrock사용볍
- 오블완
- 파이썬
- 생성형AI
- 티스토리챌린지
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |