IT/SpringBoot
@RestController @Controller
WsCode
2022. 1. 24. 21:50
@Slf4j
@Controller
public class Test1Controller {
@GetMapping("/main")
public String init() {
return "/index";
}
}
단순 컨트롤러입니다. @Controller로 해당 클래스를 등록해야지 Url을 맵핑이 원할하게 작동됩니다.
그렇지만 우리는 일반 컨트롤러와 API컨트롤러를 분리하여 작업하기도 합니다.
일반 컨트롤러와 API컨트롤러의 가장 큰차이점은 리턴 방식이 다르다는것!
일반컨트롤러는 viewresolver에 의해 html페이지가 리턴되어버립니다.
@Slf4j
@RestController
public class Test1Controller {
@GetMapping("/main")
public String init() {
return "/index";
}
}
하지만 restController는 문자열 자체를 내린다거나 객체로 리턴을하게되면 json방식으로 데이터를 내려줍니다.
@RestController를 자세하게 보면 아래와 같습니다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
인터페이스로 구현된 RestController.
@Controller, @ResponseBody를 같이 사용하여 RestController를 구현하고있습니다.
@ResponseBody는 메소드에서도 사용이가능하며 아래와같이 일반 Controller에서 메소드마다 @ResponseBody를 사용하여 문자열 자체를 내릴수있습니다.
@Slf4j
@Controller
public class Test1Controller {
@GetMapping("/main")
@ResponseBody
public String init() {
return "/index";
}
}
@RestController는 @Controller + @ResponseBody 이다 라고 생각해주시면됩니다.
여담 )
@Slf4j
@Controller
public class Test1Controller {
@GetMapping("/main")
@ResponseBody
public Dto init() {
Dto dto = new Dto();
dto.setValue1("A");
dto.setValue2("B");
return dto;
}
}
객체를 생성해서 내리면 아래와같이 스프링이 알아서 JSON으로 잘포장해줍니다.. 참편하죠?