
🌈 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