@ResponseBody, @ModelAttribute, Model 인터페이스

2024. 3. 18. 20:08Backend 취업준비/Spring

@RequestBody

 

  • 요청 본문의 JSON, XML, Text 등의 데이터가 적합한 HttpMessageConverter를 통해 파싱되어 Java 객체로 변환 된다.
  • API에서 사용

 

  • StringHttpMessageConverter
    • StringHttpMessageConverter는 HTTP 요청 및 응답의 문자열 페이로드를 처리
    • 문자열로 변환하거나 문자열을 객체로 변환하는 데 사용
  • MappingJackson2HttpMessageConverter:
    • MappingJackson2HttpMessageConverter는 JSON 데이터를 HTTP 요청 및 응답에서 처리하는 데 사용
    • JSON 데이터를 Java 객체로 변환하거나 Java 객체를 JSON으로 변환하는 데 사용
  • StringHttpMessageConverter와 MappingJackson2HttpMessageConverter는 둘 다 내부적으로 ObjectMapper를 사용하여 직렬화, 역 직렬화를 한다

 

ObjectMapper클래스 ⇒ Jackson라이브러리에서 제공

  • ObjectMapper는 JSON 오브젝트의 필드를 Java 오브젝트의 필드에 맵핑할 때 getter 혹은 setter 메서드를 사용한다.
  • getter나 setter 메서드 명의 접두사(get, set)를 지우고, 나머지 문자의 첫 문자를 소문자로 변환한 문자열을 참조하여 필드명을 알아낸다
  • 직렬화를 위해 기본 생성자는 필수다.
  • 또한 데이터 바인딩을 위한 필드명을 알아내기 위해 getter나 setter 중 1가지는 정의되어 있어야 한다

 

@ModelAttribute

  • 클라이언트가 보내는 HTTP 파라미터들을 특정 Java Object에 바인딩(맵핑) 하는 것 역할
  • /modelattribute?name=req&age=1 같은 Query String 형태 혹은 요청 본문에 삽입되는 Form 형태의 데이터를 처리하여 자바 객체에 맵핑
  • 객체의 필드에 접근해 데이터를 바인딩할 수 있는 생성자 혹은 setter 메서드가 필요
  • Query String 및 Form 형식이 아닌 데이터는 처리할 수 없다. (JSON 형태 불가)
  • 타임리프와 함께 사용되어 뷰를 랜더링 할 때 사용

 

Model 인터페이스

 

  • import org.springframework.ui.Model; 하여 사용
  • Map 인터페이스의 확장
    • Model은 자바의 Map 인터페이스를 확장합니다. 따라서 데이터를 추가, 조회, 제거할 수 있는 메서드들을 제공
    • 주로 addAttribute() 메서드를 사용하여 데이터를 추가하고, 뷰에서는 해당 데이터를 키를 통해 조회할 수 있습니다
  • 뷰와 컨트롤러 간의 중개 역할
    • Model은 뷰와 컨트롤러 간의 중개 역할을 합니다. 컨트롤러는 데이터를 Model 객체에 추가하고, 뷰는 해당 데이터를 사용하여 화면을 렌더링, 타임리프와 함께 사용

 

출처

https://tecoble.techcourse.co.kr/post/2021-05-11-requestbody-modelattribute/