@RestController和@Controller区别

@RestController和@Controller区别

[公众号:皮皮鲲编程]

原因

今天写代码的时候遇到一个错误:
404错误
但是我这个代码其实很简单,其实就是发了一个请求,然后返回一个字符串类型的。

@Controller
@Slf4j
public class OrderZkController {

    private static final String URL = "http://cloud-payment-8004";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/order/getPort")
    public String payment(){
        log.info("zheg shi /order/getPort  ");
        return restTemplate.getForObject(URL+"/getPort",String.class);
    }
}

但是不知道为啥就404了
后来我改了一下 改成 @RestController 一下就可以了。于是就查了一下这两个的区别:

区别

用途:
@Controller: 通常用于实现传统的MVC(Model-View-Controller)架构,用于返回视图(即HTML页面)。
@RestController: 结合了@Controller和@ResponseBody的功能,主要用于构建RESTful Web服务,返回的是数据(如JSON、XML)而非视图。

返回类型:
@Controller: 方法可以返回视图名称(String类型),Spring会使用视图解析器(View Resolver)来找到并渲染视图。
@RestController: 方法返回的数据直接写入HTTP响应体中,通常用于返回JSON或XML格式数据。这是因为@RestController注解包含了@ResponseBody注解,意味着数据不会被解析为视图名,而是直接在响应体中返回数据。

适用场景:
@Controller: 更适用于开发传统的基于服务器渲染页面的Web应用程序。
@RestController: 适用于开发RESTful API,这类API通常被移动应用程序、单页应用程序(SPA)或其他服务(如微服务架构中的服务)所消费。
用例:

使用@Controller时,通常与@ResponseBody一起使用,以返回数据而不是视图。
使用@RestController时,无需添加@ResponseBody,因为这一功能已经由@RestController隐式提供。

所以其实正常使用 不返回页面的话,其实还是要用@ResponseBody 只有在返回页面跳转的时候用@RestController