Spring 입문 1주차 (3)

신성훈·2024년 5월 16일
0

TIL

목록 보기
18/162
post-thumbnail

오늘의 학습 키워드

  • Jackson이란?
  • Path Variable과 Request Param
  • HTTP 데이터를 객체로 처리하는 방법

Jackson

  • JSON 데이터 구조를 처리하기 위한 라이브러리
    -Object를 JSON 타입의 String으로 변환 해줄 수 있다.
    -JSON 타입의 String을 Object로 변환해줄 수 있다.
    -SpringBoot의 starter-web 에서는 default로 Jackson 관련 라이브러리들을 제공
    -직접 JSON 데이터를 처리해야할 때는 Jackson 라이브러리의 ObjectMapper를 사용

  • Object To JSON
    -jackson 라이브러리의 ObjectMapper의 writeValueAsString 메서드 사용
    -Object를 JSON 타입의 String으로 변환하기 위해서는 해당 Object에 get Method가 필요

  • JSON To Object
    -objectMapper의 readValue 메서드를 사용하여 변환
    -JSON 타입의 String을 Object로 변환하기 위해서는 해당 Object에 기본 생성자와 get 혹은 set 메서드가 필요

Path Variable과 Request Param

  • Path Variable
    -Client 즉, 브라우저에서 서버로 HTTP 요청을 보낼 때 데이터를 함께 보낼 수 있습니다.
    -데이터를 받기 위해서는 /star/{name}/age/{age} 이처럼 URL 경로에서 데이터를 받고자 하는 위치의 경로에 {data} 중괄호를 사용
    -메서드 파라미터에 @PathVariable 애너테이션과 함께 {name} 중괄호에 선언한 변수명과 변수타입을 선언하면 해당 경로의 데이터를 받아올 수 있다.

  • Request Param
    -서버에 보내려는 데이터를 URL 경로 마지막에 ? 와 & 를 사용하여 추가할 수 있다.

    • ?name=Robbie&age=95
      -데이터를 받기 위해서는 "?name=Robbie&age=95" 에서 key 부분에 선언한 name과 age를 사용하여 value에 선언된 Robbie, 95 데이터를 받아올 수 있다.

    • (@RequestParam String name, @RequestParam int age)
      -메서드 파라미터에 @RequestParam 애너테이션과 함께 key 부분에 선언한 변수명과 변수타입을 선언하면 데이터를 받아올 수 있다.

  • form 태그 POST
    -HTML의 form 태그를 사용하여 POST 방식으로 HTTP 요청을 보낼 수 있다.
    -해당 데이터는 HTTP Body에 name=Robbie&age=95 형태로 담겨져서 서버로 전달된다.
    -데이터를 받는 방법은 @RequestParam 애너테이션을 사용하여 받아올 수 있다.
    -@RequestParam은 생략이 가능
    -@RequestParam(required = false)
    -> required 옵션을 false로 설정하면 Client에서 전달받은 값들에서 해당 값이 포함되어있지 않아도 오류가 발생하지 않는다.
    -@PathVariable(required = false) 도 해당 옵션이 존재한다.
    -Client로 부터 값을 전달 받지 못한 해당 변수는 null로 초기화 된다.

HTTP 데이터를 객체로 처리하는 방법

  • @ModelAttribute

    • form 태그 POST
      -HTML의 form 태그를 사용하여 POST 방식으로 HTTP 요청을 보낼 수 있다.
      -데이터는 HTTP Body에 name=Robbie&age=95 형태로 담겨져서 서버로 전달된다.
      -Java의 객체 형태로 받는 방법은 @ModelAttribute 애너테이션을 사용한 후 Body 데이터를 받아올 객체를 선언한다.

    • Query String 방식
      -?name=Robbie&age=95 처럼 데이터가 두 개만 있다면 괜찮지만 여러 개 있다면 @RequestParam 애너테이션으로 하나 씩 받아오기 힘들다.
      -@ModelAttribute 애너테이션을 사용하면 Java의 객체로 데이터를 받아올 수 있다.

-@ModelAttribute는 생략이 가능
(Spring에서는 @ModelAttribute뿐만 아니라 @RequestParam도 생략이 가능)
-Spring은 해당 파라미터(매개변수)가 SimpleValueType이라면 @RequestParam으로 간주하
고 아니라면 @ModelAttribute가 생략되어있다 판단한다.
(SimpleValueType은 원시타입(int), Wrapper타입(Integer), Date등의 타입을 의미)

  • @RequestBody
    -HTTP Body에 JSON 데이터를 담아 서버에 전달할 때 해당 Body 데이터를 Java의 객체로 전달 받을 수 있다.
    -Body JSON 데이터
    -HTTP Body에 {"name":"Robbie","age":"95"} JSON 형태로 데이터가 서버에 전달되었을 때 @RequestBody 애너테이션을 사용해 데이터를 객체 형태로 받을 수 있다.
  • 데이터를 Java의 객체로 받아올 때 주의할 점
    -해당 객체의 필드에 데이터를 넣어주기 위해 set or get 메서드 또는 오버로딩된 생성자가 필요
    -예를 들어 @ModelAttribute 사용하여 데이터를 받아올 때 해당 객체에 set 메서드 혹은 오버로딩된 생성자가 없다면 받아온 데이터를 해당 객체의 필드에 담을 수 없다
    -객체로 데이터를 받아올 때 데이터가 제대로 들어오지 않는다면 우선 해당 객체의 set or get 메서드 또는 오버로딩 된 생성자의 유무를 확인필요

📝오늘의 회고

Spring...Java 공부를 더 해봐야 할 것 같다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글