오답노트

[SpringBoot] @Controller 와 @RestController 본문

Java/Spring

[SpringBoot] @Controller 와 @RestController

권멋져 2024. 5. 6. 16:22

@Controller

  • 일반적인 API를 만드는 것 가능
  • Model을 인자로 주게 되면 View를 호출 할 수 있음
  • @ResponseBody를 활용하면 REST 방식으로 응답 가능

@RestController

  • Rest API를 만드는 것에 용이하다.
  • 인터페이스를 보면 @Controller와 @ResponseBody를 사용하고있다.
  • Model를 인자로 줘도 View를 호출 하지 못함
package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Controller;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

	/**
	 * The value may indicate a suggestion for a logical component name,
	 * to be turned into a Spring bean in case of an autodetected component.
	 * @return the suggested component name, if any (or empty String otherwise)
	 * @since 4.0.1
	 */
	@AliasFor(annotation = Controller.class)
	String value() default "";

}

 

@Controller 와 @RestController 에서 Model 인자 사용 차이

@Controller

package com.harmonyhub.harmonyhub.page;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class mainPageController {

    @GetMapping("/home")
    public String getMainPage(Model model) {
        return "home";
    }

}

 

@RestController

package com.harmonyhub.harmonyhub.page;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class mainPageController {

    @GetMapping("/home")
    public String getMainPage(Model model) {
        return "home";
    }

}