TIL 2023-11-01 Spring JSON 데이터 활용 (Jackson)

장규빈·2023년 11월 1일

TIL

목록 보기
15/59
post-thumbnail

스프링 강의를 듣는중 JSON데이터를 주고 받는 방법을 알게 되었다. 그래서 또 다른 방법이 있는지 공부해보았다.

프론트엔드와 백엔드가 데이터를 주고 받을 때 우리는 JSON 데이터 형식을 많이 사용한다.

ex) JSON데이터 형식

{
	"name":"json",
	"age":25
}

위와 같이 데이터들이 key : value 형식으로 구성되어있고 중괄호{} 안에 표현된다. 스프링을 백엔드로 사용할 때에도 프론트엔드에서 JSON을 받거나 JSON형식으로 데이터를 보내주어야 한다.

데이터를 JSON으로 주고 받을 때
1) 객체를 활용한다

    @PostMapping("/memos")
    public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
    
           Memo memo = new Memo(requestDto);
           MemoResponseDto memoResponseDto = new MemoResponseDto(memo);

        return memoResponseDto;
    }

이때 입력 받는 JSON형태와 같은 객체를 생성하여 받을수 있다.

package com.sparta.memo.dto;

import lombok.Getter;

@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}
package com.sparta.memo.entity;

import com.sparta.memo.dto.MemoRequestDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class Memo {
    private Long id;
    private String username;
    private String contents;

    public Memo(MemoRequestDto requestDto) {
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }

    public void update(MemoRequestDto requestDto) {
        this.username=requestDto.getUsername();
        this.contents=requestDto.getContents();
    }
}
package com.sparta.memo.dto;

import com.sparta.memo.entity.Memo;
import lombok.Getter;

@Getter
public class MemoResponseDto {
    private Long id;
    private String username;
    private String contents;

    public MemoResponseDto(Memo memo) {
        this.id = memo.getId();
        this.username = memo.getUsername();
        this.contents = memo.getContents();
    }

    public MemoResponseDto(Long id, String username, String contents) {
        this.id = id;
        this.username = username;
        this.contents = contents;
    }
}

2) JSON을 Map형태로 변환한다.

      
@ResponseBody
@RequestMapping(value = "/test", method = RequestMethod.POST)
public HashMap<String, Object> createMemo(@RequestBody HashMap<String, Object> param) { 
         return param.toString();
    }

3) Jackson 라이브러리를 사용한다.
ex)Object To JSON

@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);
}

ex)JSON To Object

@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());
}

jackson 라이브러리를 사용하면 Object->JSON타입의 String, SON타입의 String->Object 둘다 가능하다.

이전에 스프링을 처음 공부할때에는 DTO의 개념도 정확하게 몰랐고
MAP방식으로 RequestBody전부를 받아서 사용하였다. 그러니 JSON안에 JSON이 들어가있을때 많은 문제가 있었다. 그래서 오늘 배운 강의 내용이 많은 도움이 되었다.

profile
나다운사람

0개의 댓글