spring中@RestController和@Controller的区别小结

 更新时间:2023年09月21日 09:35:18   作者:mikezhu  
@RestController和@Controller这两个注解用于创建Web应用程序的控制器类,那么这两个注解有哪些区别,本文就来介绍一下,并用示例代码说明,感兴趣的可以了解一下

前面对Spring框架的一些基础知识进行了一些简单的介绍,今天继续前面的内容,对Spring框架中的,@RestController和@Controller这两个常见的注解进行一些简单的介绍,这两个注解用于创建Web应用程序的控制器类。然而,它们之间有一些重要的区别。本文将介绍这些区别,并提供一些示例代码来说明它们的使用。

@Controller 注解

@Controller是一个在Spring MVC框架中使用的注解。它用于标识一个类作为控制器,并且可以处理HTTP请求。控制器类通常用于接收用户输入并决定返回响应的内容。下面是一个使用@Controller注解的示例:

@Controller
public class HomeController {
    @RequestMapping("/")
    public String home() {
        // 返回视图名称
        return "index";
    }
}

在这个示例中,HomeController类被标记为一个控制器,并包含一个处理根路径("/")的请求的方法。该方法返回一个视图名称,Spring MVC将对应的视图渲染给用户。

将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步,还需要在该类中添加注解@RequestMapping。

@RequestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。

当使用@RequestMapping标记控制器类时,方法的请求地址是相对类的请求地址而言的;当没有使用@RequestMapping标记类时,方法的请求地址是绝对路径。

@Controller
 @RequestMapping("/test")
 public class UserController{
   @RequestMapping("/users")
   public String users() {
     return "users";
    }
  }

此时请求users方法的url路径就是:.../test/users。

可以看到上面users方法的返回值是字符串类型的,这个就是处理器在处理完任务后将要跳转的页面。如果想要方法直接返回结果,而不是跳转页面,这就要用到@ResponseBody注解了。
@ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。

格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。

如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestController,而不用在每个方法中标注@ResponseBody,简化了开发过程。

@RestController 注解

@RestController是Spring MVC提供的另一个注解,它是@Controller注解的变体。@RestController用于创建RESTful风格的Web服务,通常用于返回JSON或XML数据,而不是渲染视图。下面是一个使用@RestController注解的示例:

@RestController
public class UserController {
    @GetMapping("/users")
    public List<User> getUsers() {
        // 返回用户列表数据
        return userRepository.findAll();
    }
}

在这个示例中,UserController类被标记为一个REST控制器,并包含一个处理GET请求的方法。该方法返回一个User对象列表,Spring MVC将自动将其转换为JSON响应。

区别与用例

@Controller和@RestController的主要区别在于返回值的处理方式。@Controller可以返回视图名称或模型对象,而@RestController将以JSON或XML格式返回数据。这意味着@RestController不会将返回的对象解析为视图,而是直接发送给客户端。

下面是适合使用@Controller和@RestController的一些常见用例:

  • @Controller用于传统的Web应用程序,它需要渲染HTML模板或响应视图。
  • @RestController用于构建RESTful API,它需要返回JSON或XML格式的数据。

根据应用程序的需求,您可以选择适合的注解。

知识拓展

RESTful API(Representational State Transfer)是一种基于标准HTTP方法(如GET、POST、PUT、DELETE等)和URL结构的设计风格,用于构建可扩展、可维护和易于理解的网络服务。RESTful API通常使用JSON或XML格式来传输数据。

以下是RESTful API设计的一些重要原则:

1.  无状态性(Stateless) :每个请求应该包含足够的信息,使服务器能够理解并处理请求,而不需要依赖于先前的请求。服务器不会保存有关客户端的任何状态信息,会话状态通常由客户端管理。

2.  资源导向(Resource-Oriented) :RESTful API通过在URL中使用资源标识符来表示所请求的资源。URL应该直观地反映出资源的层次结构和关系。例如,/users表示用户资源的集合,而/users/{id}表示特定用户的详情。

3.  统一接口(Uniform Interface) :RESTful API应该具有统一的接口,包括使用标准HTTP方法(GET、POST、PUT、DELETE等)对资源进行操作,使用HTTP状态码表示操作结果,使用适当的媒体类型(如JSON、XML)传输数据,并在响应中提供自我描述的链接。

4.  可缓存性(Cacheability) :RESTful API利用HTTP的缓存机制,通过在响应头中提供适当的缓存指令来提高性能和可扩展性。响应可以被客户端或中间代理缓存,并在后续请求中使用缓存的副本。

下面是一个示例, 展示了一个简单的用户管理的RESTful API:

  • GET /users:获取所有用户的列表
  • GET /users/{id} :获取特定用户的详情
  • POST /users:创建一个新用户
  • PUT /users/{id} :更新特定用户的信息
  • DELETE /users/{id} :删除特定用户

通过使用不同的HTTP方法和URL来访问这些端点,可以对用户资源进行不同的操作。

使用RESTful API的优点包括:
-   简化客户端和服务器之间的通信和集成
-   支持多平台和多语言的开发
-   提高可伸缩性和可扩展性
-   促进前后端的松耦合和独立开发

设计良好的RESTful API应该具有清晰的URL结构和逻辑,提供一致的接口和语义,以及适当的错误处理和状态码返回。使用现有的REST框架(如Spring Boot、Django等)可以简化RESTful API的开发和管理。

总结

在本文中,我们介绍了@RestController和@Controller这两个在Spring框架中常用的注解。@Controller用于传统的Web应用程序,它处理HTTP请求并返回视图,请确保您在方法中返回视图名称。@RestController用于构建RESTful API,它将数据转换为JSON或XML格式,并直接发送给客户端。根据您的需求,选择适合的注解将有助于更好地开发Spring MVC应用程序。

到此这篇关于spring中@RestController和@Controller的区别小结的文章就介绍到这了,更多相关spring @RestController和@Controller 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • spring中时间格式化的两种方法示例讲解

    spring中时间格式化的两种方法示例讲解

    这篇文章主要介绍了spring中时间格式化的两种方法,方法一自己格式化,方法二通过配置,结合实例代码讲解的非常详细,文中补充介绍了Spring项目中时间格式化的方法,需要的朋友可以参考下
    2023-08-08
  • Java8中 LocalDate和java.sql.Date的相互转换操作

    Java8中 LocalDate和java.sql.Date的相互转换操作

    这篇文章主要介绍了Java8中 LocalDate和java.sql.Date的相互转换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • SpringMVC处理数据输出的实例代码

    SpringMVC处理数据输出的实例代码

    这篇文章主要给大家介绍了关于SpringMVC处理数据输出的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • JAVA数据写入生成excel文件和发送邮件

    JAVA数据写入生成excel文件和发送邮件

    这篇文章主要介绍了JAVA数据写入生成excel文件和发送邮件,流程:先导包 => 邮箱开启配置 => java写好配置类 => 测试发送 => 数据写入excel => 邮件带附件发送
    2024-06-06
  • Java switch case数据类型原理解析

    Java switch case数据类型原理解析

    这篇文章主要介绍了Java switch case数据类型原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 学生视角带你了解Java内部类

    学生视角带你了解Java内部类

    说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟
    2022-03-03
  • java反射_改变private中的变量及方法的简单实例

    java反射_改变private中的变量及方法的简单实例

    下面小编就为大家带来一篇java反射_改变private中的变量及方法的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • spring简单MVC实现方法(URL映射及其参数使用、查询(id、其他参数)、增加)

    spring简单MVC实现方法(URL映射及其参数使用、查询(id、其他参数)、增加)

    这篇文章主要介绍了spring简单MVC实现方法(URL映射及其参数使用、查询(id、其他参数)、增加),方法参数使用包括在无注解下获取参数,使用@RequestParam 获取参数的方法,每种方法讲解的非常详细,需要的朋友可以参考下
    2024-01-01
  • SpringAMQP消息队列实战教程

    SpringAMQP消息队列实战教程

    这篇文章主要介绍了SpringAMQP消息队列的相关知识,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2024-02-02
  • Spring Boot 入门之消息中间件的使用

    Spring Boot 入门之消息中间件的使用

    本篇文章主要介绍了Spring Boot 入门之消息中间件的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论