220216_스프링 입문_스프링 부트 시작하기_Object Mapper 및 모범사례_패스트캠퍼스 챌린지 24일차
<2022년 02월 16일 _ 패스트캠퍼스 챌린지 24일차>
[스프링 입문_스프링 부트 시작하기_Object Mapper 및 모범사례]
1. 실습
(1) File > New > Project
: Language(Java), Type(Gradle), Artifact(object-mapper), Java(11), Packaging(Jar) Next 클릭
: Web > Spring Web 체크 Finish 클릭
(2) test 코드가 잘 동작하는지 확인해봅시다
: src > test > java > com.example.objectmapper > ObjectMapperApplicationTests
package com.example.objectmapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ObjectMapperApplicationTests {
@Test
void contextLoads() {
System.out.println("hello");
}
}
2022-02-16 20:31:36.430 INFO 8892 --...
hello
BUILD SUCCESSFUL in 8s
4 actionable tasks: 2 executed, 2 up-to-date
동작 확인 완료~
(3) Object Mapper
// Object Mapper의 역할
// Text 형태의 Json --> Object 형태
// Object 형태 --> Text 형태의 Json
// controller req json(text) -> object
// response object -> json(text)
코드를 작성해봅시다~
(4) Object를 먼저 만들어줍니다 main > com.example.objectmapper 에 User 클래스를 추가합니다
package com.example.objectmapper;
public class User {
private String name;
private int age;
public User(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
(5) ObjectMapperApplicationTests 를 작성합니다
package com.example.objectmapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ObjectMapperApplicationTests {
@Test
void contextLoads() throws JsonProcessingException {
System.out.println("-------------");
// Object Mapper의 역할
// Text 형태의 Json --> Object 형태
// Object 형태 --> Text 형태의 Json
// controller req json(text) -> object
// response object -> json(text)
var objectMapper = new ObjectMapper();
//object -> text
var user = new User("steve", 10);
var text = objectMapper.writeValueAsString(user);
System.out.println(text);
//text -> object
}
}
: 실행시 오류가 발생합니다.
이유는? ObjectMapper는 get 메소드를 참조합니다
(6) User에 getter를 생성합니다
package com.example.objectmapper;
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public User(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
결과:
{"name":"steve","age":10}
object가 정상적으로 json 형태로 출력된다!
(7) text --> object 테스트를 해보자
//text -> object
var objectUser = objectMapper.readValue(text, User.class);
System.out.println(objectUser);
: 오류가 발생한다.. 왜?
: ObjectMapper가 readValue 동작 하기 위해서는 default 생성자가 필요하다
User에서 오버로딩 해줬으므로, Default 생성자 또한 추가해준다
public User(){
this.name = null;
this.age = 0;
}
실행 결과 :
{"name":"steve","age":10}
User{name='steve', age=10}
Object Mapper는 get 메소드를 활용하므로~ User에서 getter가 아닌 다른 메소드에 get을 붙이면 오류가 발생할 수 있다~ 주의하자~
(8) Camael case <-> Snake case
: User 에 phoneNumber 변수를 추가하고 json 프로퍼티에서는 phone_number로 동작하게 하자
@JsonProperty("phone_number")
private String phoneNumber;
public String getPhoneNumber() {
return phoneNumber;
}
기본 생성자는
public User(){
this.name = null;
this.age = 0;
this.phoneNumber = null;
}
public User(String name, int age, String phoneNumber){
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
결과:
{"name":"steve","age":10,"phone_number":"010-1111-2222"}
User{name='steve', age=10, phoneNumber='010-1111-2222'}
24일차 강의 완료~
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'개발새발 > Spring' 카테고리의 다른 글
220218_스프링 입문_스프링을 조금 더 들여다보기_IoC, DI(1)_패스트캠퍼스 챌린지 26일차 (0) | 2022.02.18 |
---|---|
220217_스프링 입문_스프링을 조금 더 들여다보기_스프링의 핵심_패스트캠퍼스 챌린지 25일차 (0) | 2022.02.17 |
220215_스프링 입문_스프링 부트 시작하기_Response 내려주기 및 모범사례_패스트캠퍼스 챌린지 23일차 (0) | 2022.02.15 |
220214_스프링입문_스프링 부트 시작하기_DELETE API_패스트캠퍼스 챌린지 22일차 (0) | 2022.02.14 |
220213_스프링입문_스프링 부트 시작하기_PUT API_패스트캠퍼스 챌린지 21일차 (0) | 2022.02.13 |