스프링 강의를 듣는중 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이 들어가있을때 많은 문제가 있었다. 그래서 오늘 배운 강의 내용이 많은 도움이 되었다.