当前位置: 代码网 > it编程>编程语言>Java > Springboot中Controller和RestController的使用及区别

Springboot中Controller和RestController的使用及区别

2025年11月21日 Java 我要评论
在 spring 框架中,@controller和@restcontroller是用于处理 http 请求的注解,但它们的用途和行为有显著区别:1. 核心区别@controller用于传统的 spri

在 spring 框架中,@controller 和 @restcontroller 是用于处理 http 请求的注解,但它们的用途和行为有显著区别:

1. 核心区别

@controller

  • 用于传统的 spring mvc 应用,通常返回视图(view)(如 jsp、thymeleaf 等)。
  • 若需要返回数据(如 json/xml),需额外使用 @responsebody 注解。

@restcontroller

  • 是 spring 4.0 引入的注解,专门用于构建 restful web 服务,直接返回数据(json/xml)。
  • 它本质上是 @controller + @responsebody 的组合,自动将返回值序列化为 http 响应体

2. 工作机制对比

@controller

  • 默认假设方法返回的是视图名称(view name),由 viewresolver 解析为具体页面。
  • 若要返回数据,需在方法上添加 @responsebody,此时会通过 httpmessageconverter 将返回值转换为指定格式(如 json)。
@controller
public class mycontroller {
    @getmapping("/page")
    public string showpage() {
        return "home"; // 返回视图 home.jsp(或类似)
    }

    @responsebody
    @getmapping("/data")
    public user getuser() {
        return new user("alice"); // 返回 json 数据
    }
}

@restcontroller

  • 所有方法默认添加了 @responsebody直接返回数据,无需视图解析。
  • 适合 api 开发,不涉及页面渲染。
@restcontroller
public class myrestcontroller {
    @getmapping("/api/user")
    public user getuser() {
        return new user("bob"); // 自动转换为 json
    }
}

3. 使用场景

@controller

  • 适用于需要混合视图和少量数据返回的传统 web 应用(如前后端未分离的场景)。

@restcontroller

  • 专为 restful api 设计,适用于前后端分离架构,仅返回数据(如 json/xml)。

4. 底层原理

  • @controller 依赖 viewresolver 解析视图,而 @restcontroller 依赖 httpmessageconverter 转换数据。
  • @restcontroller 的源码定义如下,可以看出它是 @controller 的增强版:
@target(elementtype.type)
@retention(retentionpolicy.runtime)
@documented
@controller
@responsebody
public @interface restcontroller {}

总结

特性@controller@restcontroller
返回类型视图(默认)或数据(需 @responsebody)直接返回数据
适用场景传统 mvc 页面渲染restful api
依赖组件viewresolverhttpmessageconverter
注解组合@controller + @responsebody

根据项目需求选择注解:

需要页面渲染用 @controller,纯 api 服务用 @restcontroller

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com