
Javascript ๊ฐ์ฒด(Object) ๋ฌธ๋ฒ์ผ๋ก ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ํํํฉ๋๋ค. Javascript ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ ๋ฐ๋ฅด๋ฉฐ Javascript์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ์ธ ๋ฌธ์์ด, ์ซ์, ๋ฐฐ์ด, ๋ถ๋ฆฌ์ธ, ๊ฐ์ฒด๊ฐ ํฌํจํฉ๋๋ค. JSON์ ํ๋กํผํฐ๋ช ์ ํฐ ํ์ดํ๋ก ๋ฌถ์ด์ค์ผ ํฉ๋๋ค.
์ง๋ ฌํ(serializtion, stringify, encoding) : ๊ฐ์ฒด๊ฐ JSON(text)์ผ๋ก ๋ฐ๋ ๋์ญ์ง๋ ฌํ(parsing, deserialization, decoding) : JSON(text)์ด ๊ฐ์ฒด๋ก ๋ฐ๋ ๋ JSON์ GET, POST ๋ฐฉ์์ผ ๋ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง GET ์์ฒญ์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ POST ์์ฒญ์ ์์ฒญ ๋ณธ๋ฌธ์ JSON ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ POST ์์ฒญ์ผ ๋ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
์ง๋ ฌํ์ ์ญ์ง๋ ฌํ ์์
React(App.jsx)
import React from "react";
import axios from "axios";
function App(props) {
function handleClick1() {
const obj1 = { name: "son", age: 44 };
// const json1 = JSON.stringify(obj1);
axios.post("/api/main41/sub1", obj1);
}
return (
<div>
<button onClick={handleClick1}>์์ฒญ(Json ๋ฐ์ดํฐ ํฌํจ)</button>
</div>
);
}
export default App;
axios๊ฐ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ ๊ฐ์ฒด๋ฉด ์๋์ผ๋ก ์ง๋ ฌํ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ณ๋๋ก JSON.stringify() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํํ ํ์๊ฐ ์์ต๋๋ค. axios๋ฅผ ์ฌ์ฉํด์ POST ์์ฒญ์ ๋ณด๋ผ ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ์๋์ผ๋ก ํด๋น ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์์ด๋ก ์ง๋ ฌํํ์ฌ ์์ฒญ ๋ณธ๋ฌธ์ ํฌํจ๋ฉ๋๋ค.Spring Boot(Controller41.java)
@Controller
@RequestMapping("/api/main41")
public class Controller41 {
@PostMapping("sub1")
public void sub1(@RequestBody Map<String, Object> map) {
// ์ญ์ง๋ ฌํ(JSON -> Map)
System.out.println("map = " + map);
}
}
@RequestBody Map<String, Object> map : ์์ฒญ ๋ณธ๋ฌธ์ ํฌํจ๋ JSON ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ํ์ฑํด์ Map์ผ๋ก ๋ณํํ์ฌ ๋ฐ์ต๋๋ค.React(App.jsx)
import React, { useState } from "react";
import axios from "axios";
function App(props) {
const [name, setName] = useState("");
const [city, setCity] = useState("");
function handleClick3() {
// const data = {
// name : name,
// city : city
// }
// const data = {
// name,
// city
// };
axios.post("/api/main41/sub3", { name, city });
}
return (
<div>
<div>
<input type="text" onChange={(e) => setName(e.target.value)} />
<br />
<input type="text" onChange={(e) => setCity(e.target.value)} />
<br />
<button onClick={handleClick3}>์์ฒญ</button>
</div>
</div>
);
}
export default App;
input์ name๊ณผ city๋ฅผ ์
๋ ฅํ๋ฉด onChange๋ฅผ ํตํด setXXX ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ํ๋ฅผ ์
๋ฐ์ดํธ ํ๊ณ handleClick3() ํจ์์์ input์ ์
๋ ฅํ ๊ฐ์ axios๋ฅผ ์ฌ์ฉํ์ฌ POST ์์ฒญ์ ๋ณด๋
๋๋ค. ์์ฒญ ๋ณธ๋ฌธ์ { name, city } ๊ฐ์ฒด๊ฐ ํฌํจ๋ฉ๋๋ค.Spring Boot(Controller41.java)
@Controller
@RequestMapping("/api/main41")
public class Controller41 {
@PostMapping("sub3")
public void sub3(@RequestBody Map<String, Object> map){
System.out.println("map = " + map);
}
}
@RequestBody๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ๋ณธ๋ฌธ์ ํฌํจ๋ JSON ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก Map ํํ๋ก ๋ณํํ์ฌ ๋ฐ์ต๋๋ค. React(App.jsx)
import React from "react";
import axios from "axios";
function App(props) {
// json ๋ฐ์ดํฐ ํ์
: ๋ฌธ์์ด,์, ๋ถ๋ฆฌ์ธ, ๊ฐ์ฒด, ๋ฐฐ์ด, null
function handleClick1() {
const data = {
name: "son",
age: 33,
married: false,
team: {
location: "london",
name: "ํ ํธ๋",
},
item: ["phone", "shoes", "shirts"],
address: null,
};
axios.post("/api/main41/sub5", data);
// {"name":"son","age":33,"married":false,
// "team":{"location":"london","name":"ํ ํธ๋"},
// "item":["phone","shoes","shirts"],"address":null}
}
return (
<div>
<button onClick={handleClick1}>json ๋ฐ์ดํฐ์ ์์ฒญ</button>
</div>
);
}
export default App;
{"name":"son","age":33,"married":false, "team":{"location":"london","name":"ํ ํธ๋"}, "item":["phone","shoes","shirts"],"address":null} Spring Boot(Controller41.java)
@PostMapping("sub5")
public void sub5(@RequestBody Map<String, Object> map){
System.out.println("map = " + map);
}
map = {name=son, age=33, married=false, team={location=london, name=ํ ํธ๋}, item=[phone, shoes, shirts], address=null}
name.getClass() = class java.lang.String
age.getClass() = class java.lang.Integer
item.getClass() = class java.util.ArrayList
married.getClass() = class java.lang.Boolean
team.getClass() = class java.util.LinkedHashMap
React(App.jsx)
import React from "react";
import axios from "axios";
function App(props) {
function handleClick3() {
axios.post("/api/main41/sub7", {
name: "lee",
height: 170.5,
info: {
address: "korea",
city: "seoul",
},
foods: ["pizza", "pasta"],
married: false,
});
}
return (
<div>
<button onClick={handleClick3}>json ๋ฐ์ดํฐ์ ์์ฒญ</button>
</div>
);
}
export default App;
handleClick3() ๋ฉ์๋์์ /api/main41/sub7 ๊ฒฝ๋ก์ POST ์์ฒญ ๋ณด๋ด๊ณ ์์ฒญ ๋ณธ๋ฌธ์ {name, height, info{address, city}, foods, married} ๊ฐ์ฒด๋ฅผ ํฌํจํฉ๋๋ค.Spring Boot(MyBean412.java)
@Data
public class MyBean412 {
private String name;
private Double height;
private Map<String, Object> info;
private List<String> foods;
private boolean married;
}
Spring Boot(Controller41.java)
@Controller
@RequestMapping("/api/main41")
public class Controller41 {
@PostMapping("sub7")
public void sub7(@RequestBody MyBean412 bean412){
System.out.println("bean412 = " + bean412);
}
}