Spring @PostMapping示例 – @GetMapping示例

Spring @PostMapping示例 – @GetMapping示例

原文: 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
}

consumesproduces属性还支持否定表达式,例如!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

  1. 如上所述,@PostMapping注解是@RequestMapping注解的一种特殊版本,用于处理 HTTP POST 请求。
  2. @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
    }
    
    
  3. 在两个注解中,传递 URL 信息都是相同的。

让我们看看使用简单代码的 PostMapping 和@RequestMapping 注解之间的区别

@RequestMapping(value = "/employees", method = RequestMethod.POST)	//1

@PostMapping("/employees")	//2

6. 总结

Spring MVC 使编写请求处理器控制器类和方法变得非常容易。 只需添加一些注解,例如@GetMapping@PostMapping,然后将此类放置在组件扫描可以找到它们并在 Web 应用程序上下文中对其进行配置的位置。

在类级别创建属性也非常容易,以便所有处理器方法默认都继承它们,并可以在需要时覆盖它们。

同样,您可以使用其他请求映射注解,例如 @PutMapping@DeleteMapping@PatchMapping

学习愉快!