메소드에 @ResponseBody이 존재하면 리턴되는 값은 View를 통해 출력되지 않고,
HTTP Response Body에 직접 쓰여지게 된다. 이때, 쓰여지기전 리턴되는 데이터 타입에 따라
MessageConverter에서 변환이 이루어진 후 쓰이게 된다.
즉, @ResponseBody를 사용하면 viewResolver을 사용하지 않고 HTTP의 BODY에 문자 내용을 직접 반환 한다.
(HTML에서의 body tag가 아님)
MessageConverter 의 종류
- StringHttpMessageConverter
- FormHttpMessageConverter
- ByteArrayMessageConverter
- MarshallingHttpMessageConverter
- MappingJacksonHttpMessageConverter
Jackson's ObjectMappter 를 사용하여 request, response 를 JSON 으로 변환할때 사용되는 MessageConverter 이다.
applicaton/json 을 지원한다.
- SourceHttpMessageConverter
- BufferedImagedHttpMessageConverter
정리하면, @ResponseBody가 있는 메서드는 별도의 리턴 타입으로 출력할 수 있고,
@ResponseBody가 없으면 viewResolver를 통해 해당 jsp에서 처리가 이루어진다.
사용 예제)
// hello-template.jsp 에서 실행
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
// hello-string 페이지 호출시 문자열 바로 출력
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
// 객체 반환시 객체가 JSON으로 변환된다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello; // 결과 값 {"name":" "}
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@PostConstruct (객체 라이프 사이클 초기화)
- 초기화 작업을 할 메소드에 적용되며, WAS가 구동될 때 실행된다.
@PreDestory (객체 라이플 사이클 종료)
- 컨테이너에서 객체를 제거하기 전에 실행된다.
사용 코드
@PostConstruct
public void init() {
System.out.println("초기화");
}
@PreDestory
public void destory() {
System.out.println("종료");
}
리눅스의 crontab와 같은 기능을 스프링에서 사용할 수 있다.
Schedule의 기능을 사용하기 위해서는 java configuration 관련 클래스에 @EnableScheduling를 추가한다.
스프링부트의 경우에는 아래와 같이 기본으로 생성되는 클래스에 넣어주면 된다.
@SpringBootApplication
@EnableScheduling
public class SampleApplication {
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
스프링의 경우에는 webConfig로 설정한 파일에 넣어주면 된다.
@Configuration
@EnableWebMvc
@EnableScheduling
@ComponentScan
public class WebConfig implements WebMvcConfigurer {
}
사용 방법
@Scheduled(fixedDelay = "1000") //고정된 시간 1초마다 호출
public void scheduleTest() {
System.out.println(System.currentTimeMillis() / 1000);
}
@Scheduled 속성은 cron, fixedDelay, fixedRate가 있다.
fixedDelay는 이전 수행이 종료된 시점부터 delay후에 재 호출되고,
fixedRate는 이전 수행이 시작된 시점부터 delay후에 재 호출된다.
때문에, fixedRate로 지정 시 동시에 여러개가 돌수 있다.
트랜잭션(Transaction) (0) | 2021.06.06 |
---|---|
SID, Service Name 차이 (0) | 2021.05.06 |
Intellij 단축키 (0) | 2021.04.06 |
Spring boot (0) | 2021.04.06 |
도메인 관련 (0) | 2021.04.01 |