【Spring实战】18 Spring中REST应用详细介绍

REST 服务的出现是为了提供一种简单、灵活、可伸缩的分布式系统架构,使得各种应用和服务能够更加轻松地相互通信和协作。

在上一篇 【Spring实战】17 REST服务介绍 文章中介绍了 REST 服务出现就是为了提供了一种更加简单、灵活、基于标准的通信方式 ,REST 服务有着哪些优势,以及概况性总结在 Spring 中都有哪些应用,本篇文章将会对 REST 在 Spring 中的应用注解结合代码逐一详细说明。

文章目录

    • @RestController
    • @RequestMapping
    • @ResponseBody
    • @RequestBody
    • @RequestParam
    • @PathVariable
    • @ResponseStatus
    • @RequestHeader
    • @GetMapping
    • @PostMapping
    • @DeleteMapping
    • @PutMapping
    • @PatchMapping
    • @ExceptionHandler
    • 最后

@RestController

如何使用:

@RestController
public class DemoController {
}

什么作用?

@RestController 注解是 Spring MVC 中的注解,它是 @Controller@ResponseBody 的组合。它表示这个类是一个控制器,并且所有的方法返回的数据直接写入 HTTP 响应体,而不是通过视图解析器进行渲染。

@RequestMapping

如何使用:

@RequestMapping("demo")
public class DemoController {
}

什么作用?

@RequestMapping("demo") 这是一个类级别的注解,用于映射 HTTP 请求的 URL 到具体的控制器类。在这里,@RequestMapping("demo") 表示所有映射到这个控制器的请求路径都以 “/demo” 开头。

需要注意的是,这段代码中并没有包含具体的处理方法。通常,你会在这个类中添加一些带有 @RequestMapping 注解的方法,用于处理不同路径的请求,并实现相应的业务逻辑。

// 方式一
// 当访问路径 `http://localhost:8080/demo`
@RequestMapping
public String sayHello() {
    return "Hello from DemoController!";
}

// 方式二
// 当访问路径 `http://localhost:8080/demo/hello`
@RequestMapping("hello")
public String sayHello() {
    return "Hello from DemoController!";
}

这样,当访问路径时,sayHello 方法将被调用,就可以返回字符串 “Hello from DemoController!” 啦。

上面这两段代码,还可以用下面这段去替代,作用是一样的。

@RestController
public class DemoController {
    @RequestMapping("demo")
    public String sayHello() {
        return "Hello from DemoController!";
    }
}

@ResponseBody

如何使用:

@RestController
public class DemoController {
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // ...
    }
}

什么作用?

@RequestBody 注解表示这个方法将从请求体中读取数据,将其转换为 User 对象。

@RequestBody

如何使用:

@RestController
public class DemoController {
    @GetMapping("/{id}")
    @ResponseBody
    public User getUser(@PathVariable Long id) {
        // ...
    }
}

什么作用?

@ResponseBody注解: 这是 Spring MVC 框架的注解,它表明方法的返回值将直接写入 HTTP 响应体,而不是通过视图解析器进行渲染。在这里,@ResponseBody 用于将 User 对象序列化为 HTTP 响应的主体部分。

@RequestParam

如何使用:

@RestController
public class DemoController {
    @GetMapping
    public ResponseEntity<String> handleParam(@RequestParam("name") String name) {
        // ...
    }
}

什么作用?

@RequestParam("name") String name 这是一个方法参数,用于接收名为 name 的请求参数。@RequestParam 注解用于将 HTTP 请求参数映射到方法的参数上,这里表示期望请求中包含名为 name 的参数,并将其映射到方法的 name 参数上。

@PathVariable

如何使用:

@RestController
public class DemoController {
    @GetMapping("/{id}")
    @ResponseBody
    public User getUser(@PathVariable Long id) {
        // ...
    }
}

什么作用?

@PathVariable注解表示这个方法从请求路径中提取一个变量,即id

@ResponseStatus

如何使用:

@RestController
public class DemoController {
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public void createUser(@RequestBody User user) {
        // ...
    }
}

什么作用?

@ResponseStatus(HttpStatus.CREATED) 是 Spring MVC 框架的注解,用于指定控制器方法的默认 HTTP 响应状态码。在这里,@ResponseStatus(HttpStatus.CREATED) 表示方法成功执行时,将返回 HTTP 状态码 201 Created

@RequestHeader

如何使用:

@RestController
public class DemoController {
    @GetMapping
    public ResponseEntity<String> handleHeader(@RequestHeader("User-Agent") String userAgent) {
        // ...
    }
}

什么作用?

  • @RequestHeader("User-Agent") 这是一个方法参数级别的注解,用于告诉 Spring MVC 从 HTTP 请求头中提取 “User-Agent” 的值。"User-Agent" 是一个标准的 HTTP 请求头,通常包含了客户端发起请求时使用的用户代理(User Agent)信息,用于标识客户端的类型和版本。
  • String userAgent 这是方法的一个参数,表示提取到的 “User-Agent” 头的值将会被赋给这个参数。在方法的执行过程中,你可以使用这个参数来获取客户端的用户代理信息。

@GetMapping

如何使用:

@RestController
public class DemoController {
    @GetMapping("/{id}")
    public ResponseEntity<String> getUserById(@PathVariable Long id) {
        // ...
    }
}

什么作用?

getUserById 方法使用了 @GetMapping("/{id}") 注解,表示它将处理形如 /users/109 这样的GET请求,其中 109 将被映射到方法参数 id 中。该方法在内部处理获取用户信息的业务逻辑。

@PostMapping

如何使用:

@RestController
public class DemoController {
    @PostMapping
    public ResponseEntity<String> createUser(@RequestBody User user) {
        // ...
    }
}

什么作用?

createUser 方法使用了 @PostMapping 注解,表示它将处理HTTP POST请求。该方法在内部处理创建用户的业务逻辑。

@DeleteMapping

如何使用:

@RestController
public class DemoController {
    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteUser(@PathVariable Long id) {
        // ...
    }
}

什么作用?

deleteUser 方法使用了 @DeleteMapping("/{id}") 注解,表示它将处理形如 /users/109 这样的DELETE请求,其中 109 将被映射到方法参数 id 中。该方法在内部处理删除用户的业务逻辑。

@PutMapping

如何使用:

@RestController
public class DemoController {
    @PutMapping("/{id}")
    public ResponseEntity<String> updateUser(@PathVariable Long id, @RequestBody User user) {
        // ...
    }
}

什么作用?

updateUser 方法使用了 @PutMapping("/{id}") 注解,表示它将处理形如 /users/109 这样的PUT请求,其中 109 将被映射到方法参数 id 中。该方法在内部处理更新用户的业务逻辑。

@PatchMapping

如何使用:

@RestController
public class DemoController {
    @PatchMapping("/{id}")
    public ResponseEntity<String> partiallyUpdateUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
        // ...
    }
}

什么作用?

partiallyUpdateUser 方法使用了 @PatchMapping("/{id}") 注解,表示它将处理形如 /users/109 这样的 PATCH 请求,其中 109 将被映射到方法参数 id 中。该方法在内部处理部分更新用户信息的业务逻辑。

@ExceptionHandler

如何使用:

@RestController
public class DemoController {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<String> handleUserCreateFailed(Exception ex) {
        // ...
    }
}

什么作用?

@ExceptionHandler(Exception.class) 这是 Spring MVC 框架的注解,表示该方法将处理在控制器中抛出的特定类型的异常。在这里使用的 Exception.class 可以替换成我们想要捕获的其他异常,也包括自定义异常

最后

这些都是我们在写 Web 项目经常用到的注解,有了它们之后就可以简单的灵活的开发 Web 应用程序啦。

你可能感兴趣的:(Spring实战,spring,java,后端)