
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등의 타입을 의미)
📝오늘의 회고
Spring...Java 공부를 더 해봐야 할 것 같다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~