▸ 코드 카타
▸ 서버의 주 업무
▸ JSON 데이터 반환하는 방법
▸ RestController
▸ Jackson
▸ DTO
▸ Create, Read, Upgrade, Delete
▸ 코드 카타
2024년 1월 22일 - [프로그래머스] 10: 시저암호 | 숫자 문자열과 영단어 | 문자열 내 마음대로 정렬하기
▸ 서버의 주 업무
▸ JSON 데이터 반환하는 방법
@Controller
@RequestMapping("/response")
public class ResponseController {
@GetMapping("/json/string")
@ResponseBody
public String helloStringJson() {
return "{\"name\":\"yejin\",\"age\":26}";
}
@GetMapping("/json/class")
@ResponseBody
public Star helloClassJson(){
return new Star("yejin", 26);
}
}
[Star]
package com.sparta.springmvc.response;
import lombok.Getter;
@Getter
public class Star {
String name;
int age;
public Star(String name, int age) {
this.name = name;
this.age = age;
}
public Star() {}
}
▸ RestController
@RestController
@RequestMapping("/response/rest")
public class ResponseRestController {
// [Response header]
// Content-Type: text/html
// [Response body]
// {"name":"yejin","age":26}
@GetMapping("/json/string")
public String helloStringJson() {
return "{\"name\":\"yejin\",\"age\":26}";
}
// [Response header]
// Content-Type: application/json
// [Response body]
// {"name":"yejin","age":26}
@GetMapping("/json/class")
public Star helloClassJson() {
return new Star("yejin", 26);
}
}
📍@Controller / @RestController
▸ Jackson
📍Object -> JASON
@Test
@DisplayName("Object To JSON : get Method 필요")
void test1() throws JsonProcessingException {
Star star = new Star("yejin", 26);
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
String json = objectMapper.writeValueAsString(star);
System.out.println("json = " + json);
}
json = {"name":"yejin","age":26}
📍JSON -> Object
@Test
@DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
void test2() throws JsonProcessingException {
String json = "{\"name\":\"yejin\",\"age\":26}"; // JSON 타입의 String
ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
Star star = objectMapper.readValue(json, Star.class);
System.out.println("star.getName() = " + star.getName());
}
▸ DTO
📍DTO란 무엇일까?
📍RequestDto, ResponseDto
▸ Create, Read, Upgrade, Delete
[Controller package]
package com.sparta.memo.controller;
import com.sparta.memo.dto.MemoRequestDto;
import com.sparta.memo.dto.MemoResponseDto;
import com.sparta.memo.entity.Memo;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class MemoController {
private final Map<Long, Memo> memoList = new HashMap<>();
@PostMapping("/memos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto){
//requestDto를 저장해야하기 때문에 entity로
Memo memo = new Memo(requestDto);
//id
Long maxId = memoList.size() > 0 ? Collections.max(memoList.keySet()) + 1 : 1;
memo.setId(maxId);
//데이터베이스에 저장
memoList.put(memo.getId(), memo);
//entity -> ResponseDto
MemoResponseDto memoResponseDto = new MemoResponseDto(memo);
return memoResponseDto;
}
@GetMapping("/memos")
public List<MemoResponseDto> getMemos(){
List<MemoResponseDto> responseList = memoList.values().stream()
.map(MemoResponseDto::new).toList();
return responseList;
}
@PutMapping("/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto){
//해당 메모가 DB에 존재하는지 확인
if(memoList.containsKey(id)){
//해당 메모 가져오기
Memo memo = memoList.get(id);
//memo 수정
memo.update(requestDto);
return memo.getId();
} else{
throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
}
}
@DeleteMapping("/memos/{id}")
public Long deleteMemo(@PathVariable Long id){
//해당 메모가 DB에 존재하는지 확인
if(memoList.containsKey((id))){
//해당 메모 삭제
memoList.remove(id);
return id;
} else {
throw new IllegalArgumentException("선택한 메모는 존재하지 않습니다.");
}
}
}