• Springboot项目RestController中函数参数注解使用


    Springboot项目RestController中函数参数注解使用

    什么是restful风格

    “REST” 代表 “Representational State Transfer”,是一种架构风格和通信协议,通常用于构建分布式网络应用和服务。RESTful 风格的架构强调了资源的概念,资源可以用唯一的标识符(通常是URL)来访问,而对资源的操作则通过标准的HTTP方法(如GET、POST、PUT、DELETE等)来完成。

    以下是 REST 架构风格的关键特点:

    1. 资源(Resources):在 REST 中,所有的数据都被视为资源,每个资源都有一个唯一的标识符(通常是URL)。资源可以是实际的数据对象、文档、服务等。

    2. HTTP 方法:RESTful 服务使用标准的 HTTP 方法来对资源执行操作。常用的 HTTP 方法包括 GET(获取资源)、POST(创建资源)、PUT(更新资源)、DELETE(删除资源)等。

    3. 状态无关性(Stateless):每个请求都应该包含足够的信息以便服务器理解,而服务器不应该依赖于之前的请求来处理当前请求。这使得服务可以水平扩展,因为每个请求都是独立的。

    4. 表示(Representation):资源的状态可以通过多种表示形式来表示,例如 JSON、XML、HTML 等。客户端可以根据需要选择合适的表示形式。

    5. 无状态通信:通信是无状态的,每个请求都包含了所有必要的信息,服务器不需要维护客户端的会话状态。

    6. 统一接口(Uniform Interface):RESTful 服务的接口应该是简单和统一的,以便客户端容易理解和使用。

    RESTful 架构常用于构建 Web API,以便不同应用程序和服务之间进行通信。它的设计原则使得系统具有可伸缩性、可维护性和松耦合性,并且易于理解和使用。许多互联网服务,如社交媒体平台的API、移动应用的后端服务等,都采用了 RESTful 架构。

    注解使用介绍

    一般我们在使用Rest风格的controller的时候如果是在url中的参数,在写函数的时候直接写了和url中参数名一样,那么spring就会直接帮你进行对应配对注入值,但有时候这样子直接用的话不一定会注入成功,这个时候我们有必要了解spring处理这些的问题的注解,来解决问题;

    这里只有一些简单的注解使用,对于平时的开发是完全够用的。

    1. @RequestBody

      • 用途:用于接收请求体中的JSON或表单数据,并将其映射到Java对象。通常用于处理POST请求等需要传递数据体的请求。

      • 示例

        @RestController
        public class UserController {
            
            @PostMapping("/create-user")
            public ResponseEntity<String> createUser(@RequestBody User user) {
                // 处理用户创建逻辑
                return ResponseEntity.ok("User created: " + user.getUsername());
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9

        在上述示例中,@RequestBody用于接收JSON或表单数据,并将其映射到名为userUser对象中。

    2. @PathVariable

      • 用途:用于从URL路径中提取变量值,通常用于RESTful风格的URL。

      • 示例

        @RestController
        public class ProductController {
            
            @GetMapping("/products/{productId}")
            public ResponseEntity<String> getProductDetails(@PathVariable Long productId) {
                // 使用productId获取产品详情
                return ResponseEntity.ok("Product ID: " + productId);
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9

        在上述示例中,@PathVariable用于提取URL路径中的productId变量值。访问路径如:/products/123

    3. @RequestParam

      • 用途:用于获取URL查询参数。

      • 示例

        @RestController
        public class SearchController {
            
            @GetMapping("/search")
            public ResponseEntity<String> search(@RequestParam String query) {
                // 使用查询参数执行搜索
                return ResponseEntity.ok("Search Query: " + query);
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9

        在上述示例中,@RequestParam用于获取名为query的查询参数值。访问路径如:/search?query=example

    4. @RequestHeader

      • 用途:用于获取HTTP请求头信息。

      • 示例

        @RestController
        public class HeaderController {
            
            @GetMapping("/user-agent")
            public ResponseEntity<String> getUserAgent(@RequestHeader("User-Agent") String userAgent) {
                // 获取User-Agent头信息
                return ResponseEntity.ok("User-Agent: " + userAgent);
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9

        在上述示例中,@RequestHeader用于获取User-Agent头信息的值。

    5. @CookieValue

      • 用途:用于获取Cookie的值。

      • 示例

        @RestController
        public class CookieController {
            
            @GetMapping("/get-cookie")
            public ResponseEntity<String> getCookieValue(@CookieValue("myCookie") String cookieValue) {
                // 获取名为myCookie的Cookie的值
                return ResponseEntity.ok("Cookie Value: " + cookieValue);
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9

        在上述示例中,@CookieValue用于获取名为myCookie的Cookie的值。

  • 相关阅读:
    【数据结构】B树
    用c语言实现静态通讯录
    最新版校园招聘进大厂系列----------(3)字节篇 -----未完待续
    ESP8266-Arduino编程实例-三路红外寻迹传感器驱动
    【JavaScript】深入浅出理解事件循环
    前端动效讲解与实战
    FusionCharts Suite XT v3.21 Crack
    数据库设计规范
    Python基础:第012课——最小的程序框架(代码解析)
    【Linux - 操作技术】八 软件包管理
  • 原文地址:https://blog.csdn.net/Go_ahead_forever/article/details/133205445