多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# Spring `@PostMapping`示例 – `@GetMapping`示例 > 原文: [https://howtodoinjava.com/spring5/webmvc/controller-getmapping-postmapping/](https://howtodoinjava.com/spring5/webmvc/controller-getmapping-postmapping/) 学习使用`@Controller`创建 [Spring MVC](https://howtodoinjava.com/spring-mvc-tutorial/) 控制器,并使用请求映射注解来映射请求,例如 `@RequestMapping`,`@GetMapping`,`@PostMapping`,`@PutMapping`,`@DeleteMapping`和`@PatchMapping`。 ## 1\. Spring 控制器 #### 1.1. `@Controller`注解 Spring MVC 提供了基于注解的方法,您无需扩展任何基类即可表达**请求映射**,请求**输入参数**,**异常处理**等。 [`@Controller`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/stereotype/Controller.html)是类似的注解,将一个类标记为请求处理器。 `HomeController.java` ```java package com.howtodoinjava.web; @Controller public class HomeController { @GetMapping("/") public String homeInit(Model model) { return "home"; } } ``` 在上面的代码中,`HomeController`类充当请求控制器。 它的`homeInit()`方法将处理对 URI `"/"`的所有传入请求。 它接受`Model`并返回视图名称`home`。 此视图名称由配置的**视图解析器**解析。 #### 1.2. 启用组件扫描 要让 Spring 扫描和配置`@Controller`带注解的类,您需要在存储控制器的软件包上配置组件扫描。 `WebConfig.java` ```java @Configuration @ComponentScan("com.howtodoinjava.web") public class WebConfig { //Other configurations } //or <context:component-scan base-package="com.howtodoinjava.web"/> ``` > 阅读更多: [Spring MVC 示例](https://howtodoinjava.com/spring5/webmvc/spring5-mvc-hibernate5-example/) ## 2\. Spring `@GetMapping`示例 `@GetMapping`是[`@RequestMapping`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html)注解的专用版本,用作`@RequestMapping(method = RequestMethod.GET)`的快捷方式。 [`@GetMapping`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/GetMapping.html)带注解的方法处理与给定 URI 表达式匹配的 HTTP `GET`请求。 例如 `@GetMapping Example` ```java @GetMapping("/home") public String homeInit(Model model) { return "home"; } @GetMapping("/members/{id}") public String getMembers(Model model) { return "member"; } ``` ## 3\. Spring `@PostMapping`示例 `@PostMapping`是`@RequestMapping`注解的专用版本,用作`@RequestMapping(method = RequestMethod.POST)`的快捷方式。 [`@PostMapping`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/PostMapping.html)带注解的方法处理与给定 URI 表达式匹配的 HTTP `POST`请求。 例如 `@PostMapping Example` ```java @PostMapping(path = "/members", consumes = "application/json", produces = "application/json") public void addMember(@RequestBody Member member) { //code } ``` `consumes`和`produces`属性还支持否定表达式,例如`!text/plain`表示除`text/plain`以外的任何媒体类型。 ## 4\. 共享的类级别属性 您可以在类级别声明共享的`produces`属性。 在类级别使用时,方法级别的`produces`属性将覆盖类级别的声明。 `HomeController.java` ```java package com.howtodoinjava.web; @Controller @RequestMapping(path = "/", produces = MediaType.APPLICATION_JSON_VALUE) public class HomeController { @PostMapping(path = "/members") public void addMemberV1(@RequestBody Member member) { //code } @PostMapping(path = "/members", produces = MediaType.APPLICATION_XML_VALUE) public void addMemberV2(@RequestBody Member member) { //code } } ``` 在上面的示例中,`addMemberV1()`方法以默认媒体类型(即`application/json`)生成内容。 第二种方法`addMemberV2()`会覆盖`produces`属性,并将生成`application/xml`类型的内容。 ## 5\. `@PostMapping`与`@RequestMapping` 1. 如上所述,`@PostMapping`注解是`@RequestMapping`注解的一种特殊版本,用于处理 **HTTP POST** 请求。 2. `@PostMapping`是`@RequestMapping(method = RequestMethod.POST)`的快捷方式。 `PostMapping.java` ```java @Target({ java.lang.annotation.ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = { RequestMethod.POST }) public @interface PostMapping { //code } ``` 3. 在两个注解中,传递 URL 信息都是相同的。 让我们看看使用简单代码的 PostMapping 和@RequestMapping 注解之间的**区别**。 ```java @RequestMapping(value = "/employees", method = RequestMethod.POST) //1 @PostMapping("/employees") //2 ``` ## 6\. 总结 Spring MVC 使编写请求处理器控制器类和方法变得非常容易。 只需添加一些注解,例如`@GetMapping`和`@PostMapping`,然后将此类放置在组件扫描可以找到它们并在 Web 应用程序上下文中对其进行配置的位置。 在类级别创建属性也非常容易,以便所有处理器方法默认都继承它们,并可以在需要时覆盖它们。 同样,您可以使用其他请求映射注解,例如 `@PutMapping`,`@DeleteMapping`和`@PatchMapping`。 学习愉快!