팥빵 먹으면서 코딩하는 블로그

Object Mapper 본문

study/JAVA SPRING

Object Mapper

김팥빵_ 2024. 8. 29. 13:46
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외에 따로 작업을 해야 한다던지 객체를 json으로 바꿔야 된다던지 할땐
        object mapper를 생성한 다음 write value에 string이라든기 read value를 통해 json을 object로 반대로 바꿔줄 수 있음.

        이제까지 우리는 controller에서 request로 json(text)형태로 들어오면 자동적으로 object로 바꿔줬고,
        response를 object로 return하게 되면 자동적으로 json(text)형태로 바꿔주고 있었음.

        여기선 직접 객체로 생성해서 우리가 활용해볼거임.
         */

        var objectMapper = new ObjectMapper(); //object 생성

        //01. oject ->text
        //object에서 text로 바뀔 때는 object mapper가 get method를 활용한다.
        var user = new User("steve", 24, "01023456789");

        var text = objectMapper.writeValueAsString(user); //*************
        System.out.println(text);

        //02. text -> object
        //object mapper는 동작하기 위해서 바꿀 class 객체에 default 상태인 생성자가 있어야 한다.
        var objectUser = objectMapper.readValue(text, User.class); //첫번째에는 json text, 두번째에는 어떠한 클래스로 바꿀건지 class를 넣어주면 됨.
        System.out.println(objectUser);

    }

    /*
    출력값:
    {"name":"steve","age":24,"phone_number":"01023456789"} <- object가 text로 바뀐 형태, snake 형태로 출력
    User{name='steve', age=24, phoneNumber='01023456789'} <- text가 object로 바뀐 형태, camel 형태로 출력
     */
}

 

- User 객체

package com.example.objectmapper;

import com.fasterxml.jackson.annotation.JsonProperty;

public class User {

    private String name;
    private int age;

    @JsonProperty("phone_number")
    private String 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;
    }


    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    //get set말고 다른 method를 만드는 경우,
    //method 이름에 "get"이 포함되어 있으면 object mapper가 해당 클래스에 대해서 sereialize, deserialize할 때 에러가 발생한다.
    //따라서 반드시 내가 작성한 class가 object mapper에 활용된다고 할 땐, get을 붙여주면 안된다.
    /*
    public User getDefaultUser(){
        return new User("defalut", 10);
    }
    다음은 고쳐본 거.
     */
    public User DefaultUser(){
        return new User("defalut", 10, "01022233333");
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", phoneNumber='" + phoneNumber + '\'' +
                '}';
    }
}

'study > JAVA SPRING' 카테고리의 다른 글

DI에 대하여  (0) 2024.08.29
spring에 대하여  (0) 2024.08.29
controller 00.  (0) 2024.08.29
controller 05 - RESPONSE  (0) 2024.08.29
controller 04 - delete  (0) 2024.08.28