🌈 PDF로 보려면 👉여기👈를 클릭하세요.
@ResponseBody
와 return 타입에 따른 응답 콘텐츠 타입조건 | 작동 | 응답 콘텐츠 타입 |
---|---|---|
@Controller + @ResponseBody + return String | HttpMessageConverter | HTML |
@Controller + @ResponseBody + return 객체(Map, List, Class 등) | HttpMessageConverter(Jackson 라이브러리) | JSON |
@Controller + return String(JSP 파일 경로) | ViewResolver | JSP 파일에서 설정된 콘텐츠 타입 |
👉 HttpMessageConverter
- 특정 미디어 타입 데이터(JSON, XML, HTML, 텍스트 등)와 Java 객체를 변환을 담당하는 인터페이스이다.
DispatcherServlet
은 요청이 들어올 때 적절한 HttpMessageConverter를 선택하여 요청 메시지를 Java 객체로 변환하거나, 응답 메시지를 Java 객체에서 특정 미디어 타입의 데이터로 변환하여 클라이언트에게 반환한다.
👉 Jackson 라이브러리
- JSON 형식의 데이터를 처리하기 위한 라이브러리이다.
- Spring에서 JSON 데이터와 Java 객체 간의 변환을 담당하는
MappingJackson2HttpMessageConverter
(HttpMessageConverter
의 구현체)에서 사용된다.
@Controller
vs. @RestController
@Controller | @RestController |
---|---|
주로 뷰를 사용하여 모델의 데이터를 렌더링해야 하는 Spring MVC 서비스에서 사용 | 응답 본문에 바인딩된 객체 값을 반환하는 RESTful 웹 서비스에서 사용 |
응답을 어떻게 보낼지에 대한 제어와 유연성을 제공 | 모든 결과를 응답 본문에 작성 |
응답 값이 HttpMessageConverters 를 통해 변환되고 응답 객체를 통해 보내져야 하는 경우, @ResponseBody 을 추가해야 함 | @Controller 와 @ResponseBody 의 결합이므로 따로 추가할 필요 없음 |
@RequestMapping
위치
- 메소드 위(전체 경로)
- 클래스 위(공통 경로) + 메소드 위(나머지 경로)
// 1) 메소드 위(전체 경로)
package com.example.lesson01;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Lesson01Ex01RestController {
@RequestMapping("/lesson01/ex01/1") // ⭐️ 전체 경로
public String ex01_1() {
return "1번 메소드 입니다.";
}
@RequestMapping("/lesson01/ex01/2") // ⭐️ 전체 경로
public String ex01_2() {
return "2번 메소드 입니다.";
}
}
// 2) 클래스 위(공통 경로) + 메소드 위(나머지 경로)
package com.example.lesson01;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/lesson01/ex01") // ⭐️ 공통 경로
@RestController
public class Lesson01Ex01RestController {
@RequestMapping("/1") // ⭐️ 나머지 경로
public String ex01_1() {
return "1번 메소드 입니다.";
}
@RequestMapping("/2") // ⭐️ 나머지 경로
public String ex01_2() {
return "2번 메소드 입니다.";
}
}
@ResponseBody
위치
- 메소드
- 메소드 위(권장)
- 메소드 반환 타입 앞
- 클래스 위
// 1) 메소드 위(권장)
package com.example.lesson01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class Lesson01Ex01Controller {
@RequestMapping("/lesson01/ex01/3")
@ResponseBody // ⭐️
public String ex01_3() {
return "3번 메소드 입니다.";
}
}
// 2) 메소드 반환 타입 앞
package com.example.lesson01;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class Lesson01Ex01Controller {
@RequestMapping("/lesson01/ex01/3")
public @ResponseBody String ex01_3() { // ⭐️
return "3번 메소드 입니다.";
}
}
@SpringBootApplication
@Configuration
+@EnableAutoConfiguration
+@ComponentScan
- 스프링 빈을 스캔(
@Configuration
,@ComponentScan
)하여 스프링 애플리케이션을 자동으로 구성(@EnableAutoConfiguration
)하도록 한다.
👉 Spring Bean vs. Java Bean
- Spring Bean: 스프링 프레임워크에서 관리되고 생성되는 객체, 어노테이션으로 생성
- Java Bean: 일반 Java 클래스,
new
로 객체 생성
@Component
@Component
는 다른 어노테이션들의 부모 역할을 한다.@Component
vs. @Configurataion
vs. @Bean
@Component
: 일반 클래스에 붙음 🚩스프링 빈: 클래스의 인스턴스@Configurtaion
: 설정 클래스에 붙음@Bean
: 메소드에 붙음, 🚩스프링 빈: 리턴하는 객체@DateTimeFormat
@DateTimeFormat (pattern="yyyy-MM-dd") Date date
와 같은 형식으로 사용한다.🔗 https://www.jrebel.com/blog/spring-annotations-cheat-sheet
🔗 https://medium.com/@.midi/interview-questions-on-spring-restful-web-services-86d0e5e28a14