Jackson
: Java 객체와 JSON 데이터 간의 변환을 자동으로 처리해주는 라이브러리
- Oject ➡️ JSON 타입의 String 변환 가능
(반대로, JSON 타입의 String ➡️ Oject 변환 가능) - 3.0 버전 이후 Spring은 Jackson과 관련된 API를 제공함으로써, JSON 데이터를 처리하지 않아도 자동으로 처리해줌
Object To JSON (객체 ➡️ JSON)
- Get 메서드 필요
ObjectMapper
: 객체를 JSON으로 serialization or JSON을 객체로 deserialization할 때 사용하는 Jackson 라이브러리의 클래스
- writeValueAsString() 이라는 메서드를 가지고 있음.
- 해당 메서드에 Object 객체를 매개변수로 넣어주면 String 타입으로 반환해줌
public class JacksonTest {
@Test
@DisplayName("Object To JSON : get Method 필요")
void test1() throws JsonProcessingException {
Star star = new Star("Robbie", 95);
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
String json = objectMapper.writeValueAsString(star);
System.out.println("json = " + json);
}
}
JSON To Object
- 기본 생성자와 get or set 메서드가 필요
- readValue() 라는 메서드를 가지고 있음.
- 해당 메서드에 첫 번째 파라미터에는 JSON 타입의 String을 넣어주고, 두 번째 파라미터에는 어떤 객체로 mapping 할 건지를 넣어주면 됨.
@Test
@DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
void test2() throws JsonProcessingException {
String json = "{\"name\":\"Robbie\",\"age\":95}"; // JSON 타입의 String
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
Star star = objectMapper.readValue(json, Star.class);
System.out.println("star.getName() = " + star.getName());
}
- 브라우저에서 서버로 HTTP 요청을 보낼 때 데이터를 함께 보낼 수 있음
- 서버에서는 해당 데이터를 받아 사용해야하는데 데이터를 보내는 방식은 여러 가지
Path Variable 방식
: 보내려고 하는 데이터를 브라우저에서 경로에 넣어놓는 것
- 서버에 보내려는 데이터를 URL 경로에 추가 가능
// GET http://localhost:8080/hello/request/star/Robbie/age/95
@GetMapping("/star/{name}/age/{age}")
@ResponseBody
public String helloRequestPath(@PathVariable String name, @PathVariable int age)
{
return String.format("Hello, @PathVariable.<br> name = %s, age = %d", name, age);
}
- @PathVariable annotation을 파라미터 안에 넣어 해당 경로에 있는 중괄호로 감싸진 데이터를 받아옴
Request Param 방식
: Query String 방식이라고도 부름.
- @RequestParam annotation 생략도 가능.
- 해당 annotation이 생략되어있지 않으면 (required = true)가 default로 설정되어 있는 것이므로 값이 꼭 와야 함.
- @RequestParam(required = false)로 설정 바꿀 수 있음. ➡️ false로 설정할 경우 null 값이 들어옴
GET 방식
// [Request sample]
// GET http://localhost:8080/hello/request/form/param?name=Robbie&age=95
@GetMapping("/form/param")
@ResponseBody
public String helloGetRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
- 위의 코드 2번째 줄에서 ? 앞 param 까지가 API 요청 URL
- 데이터를 시작할 때 물음표로 시작'
- 여러 데이터를 보낼 수 있고, 데이터간 구분 방법은 &
- @RequestParam annotation을 파라미터 안에 넣어 ? 이후에 있는 데이터를 받아옴
Form태그 POST
- Content type: application/x-www-form-urlencoded
이와 같은 타입으로 넘어옴 - POST는 GET과는 다르게 HTTP Body(payload)에 데이터를 가지고 있음.
// [Request sample]
// POST http://localhost:8080/hello/request/form/param
// Header
// Content type: application/x-www-form-urlencoded
// Body
// name=Robbie&age=95
@PostMapping("/form/param")
@ResponseBody
public String helloPostRequestParam(@RequestParam String name, @RequestParam int age) {
return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
}
용어 정리
- serialization
: 직렬화. 객체를 JSON으로 변환하는 것 (JSON 외에도) - deserialization
: 역직렬화. JSON을 객체로 변환하는 것 (JSON 외에도)
'내일배움캠프(Sparta) > Spring' 카테고리의 다른 글
[Spring] DTO (0) | 2023.11.02 |
---|---|
HTTP 데이터를 객체로 처리하는 방법 (0) | 2023.11.02 |
[Spring] 데이터를 Client에 반환하는 방법 (0) | 2023.11.02 |
[Spring] Controller / 정적 페이지 / 동적 페이지 (0) | 2023.11.02 |
[Spring] Spring MVC / Front Controller (1) | 2023.11.01 |