原文: https://howtodoinjava.com/spring5/webmvc/controller-getmapping-postmapping/
学习使用@Controller
创建 Spring MVC 控制器,并使用请求映射注解来映射请求,例如 @RequestMapping
,@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
和@PatchMapping
。
1. Spring 控制器
1.1. @Controller
注解
Spring MVC 提供了基于注解的方法,您无需扩展任何基类即可表达请求映射,请求输入参数,异常处理等。 @Controller
是类似的注解,将一个类标记为请求处理器。
HomeController.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
@Configuration
@ComponentScan("com.howtodoinjava.web")
public class WebConfig {
//Other configurations
}
//or
<context:component-scan base-package="com.howtodoinjava.web"/>
阅读更多: Spring MVC 示例
2. Spring @GetMapping
示例
@GetMapping
是@RequestMapping
注解的专用版本,用作@RequestMapping(method = RequestMethod.GET)
的快捷方式。 @GetMapping
带注解的方法处理与给定 URI 表达式匹配的 HTTP GET
请求。 例如
@GetMapping Example
@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
带注解的方法处理与给定 URI 表达式匹配的 HTTP POST
请求。 例如
@PostMapping Example
@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
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
如上所述,
@PostMapping
注解是@RequestMapping
注解的一种特殊版本,用于处理 HTTP POST 请求。@PostMapping
是@RequestMapping(method = RequestMethod.POST)
的快捷方式。PostMapping.java
@Target({ java.lang.annotation.ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = { RequestMethod.POST })
public @interface PostMapping
{
//code
}
- 在两个注解中,传递 URL 信息都是相同的。
让我们看看使用简单代码的 PostMapping 和@RequestMapping 注解之间的 区别。
@RequestMapping(value = "/employees", method = RequestMethod.POST) //1
@PostMapping("/employees") //2
6. 总结
Spring MVC 使编写请求处理器控制器类和方法变得非常容易。 只需添加一些注解,例如@GetMapping
和@PostMapping
,然后将此类放置在组件扫描可以找到它们并在 Web 应用程序上下文中对其进行配置的位置。
在类级别创建属性也非常容易,以便所有处理器方法默认都继承它们,并可以在需要时覆盖它们。
同样,您可以使用其他请求映射注解,例如 @PutMapping
,@DeleteMapping
和@PatchMapping
。
学习愉快!