介绍:
从Spring 2.5开始,我们可以使用注释来标记我们的Spring组件。
一种方法是在我们的appConfig.xml中使用<component-scan>标记:
<context:component-scan base-package="com.programmergirl" />
然后,Spring容器将递归扫描给定包及其子包中的所有组件。
在本快速教程中, 我们将讨论最常用的Spring MVC注释。
定义
根据其类型,我们可以为控制器使用两种不同的注释:
我们可以简单地使用此注释来标记我们的任何Spring MVC控制器类:
@Controller
public class MyController {...
}
该注释对于注释我们的RESTful控制器很有用:
@RestController
public class MyRestController {...
}
该注释本身使用@Controller和@ResponseBody注释进行注释。
在另一篇文章中,我们已经详细介绍了@Controller和@RestController之间的区别 。
请求处理注释:
现在让我们看一下可用于处理HTTP请求的注释:
我们使用此批注在Spring MVC Controller中映射Web请求方法 。 我们还可以使用其可用属性对其进行自定义:
- method:表示一种HTTP请求方法-PUT,GET,POST,DELETE,PATCH
- 值:映射的URL
- params :根据HTTP参数过滤请求
- headers :根据HTTP标头过滤请求。
- 产生:定义HTTP响应的媒体类型
- 消耗:指定HTTP请求的媒体类型
@Controller
@RequestMapping("/hello-world")
class MyController {@RequestMapping(value = "/message", method = RequestMethod.GET)String message() {return "Hello World!";}
}
我们还可以在类级别使用此注释来设置一些公共属性 。
此外,从Spring 4.3开始,@ RequestMapping为不同的HTTP方法提供了多种变体。 这些包括@ GetMapping,@ PutMapping,@ PostMapping,@ DeleteMapping和@PatchMatching。
有了这个注释,我们可以将HTTP请求参数绑定到method参数 :
@GetMapping("/message")
String message(@RequestParam("userName") String userName) {return "Hello " + userName;
}
(可选)我们还可以提供默认值。 对于request参数的缺失值,使用默认值:
@GetMapping("/message")
String message(@RequestParam(defaultValue = "Sam") String userName) {return "Hello " + userName;
}
我们可以将method参数绑定到path或URI中的变量之一。 我们将使用@PathVariable :
@GetMapping("/message/{userName}")
String message(@PathVariable String userName) {...
}
另外,我们可以通过将required设置为false来选择将路径变量标记为可选:
@GetMapping("/message/{userName}")
String message(@PathVariable(required = false) String userName) {...
}
可以将HTTP请求正文作为参数传递给控制器中的处理程序方法。 我们经常使用它来读取带有PUT和POST等 HTTP方法的请求的请求主体。
@PostMapping("/message")
String message(@RequestBody String userName) {...
}
内容将根据其类型使用HttpMessageConverter自动反序列化。
响应处理注释:
现在,让我们探索一些可用于处理HTTP响应的注释:
与@RequestBody相似,我们有一个@ResponseBody批注。 当我们使用此注释对方法进行注释时,Spring将此方法的结果视为响应本身:
@GetMapping("/message")
@ResponseBody
String message() {return "Hello World!!";
}
我们还可以使用此注释来注释@Controller类。 如果是这样,我们控制器中的所有方法都将使用它。
这样,我们可以将所需的HTTP响应状态映射到控制器中的方法:
@ExceptionHandler(UserAccessDeniedException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
void onUserAccessDeniedException(UserAccessDeniedException exception) {...
}
我们可以了解更多有关如何使用@ResponseStatus设置状态代码和原因的信息。
我们可以编写自定义的异常处理程序方法。 在方法执行期间引发其类型异常时,将调用以下方法:
@ExceptionHandler(UserAccessDeniedException.class)
void onUserAccessDeniedException(UserAccessDeniedException exception) {// ...
}
结论:
在本教程中,我们浏览了大多数常用的Spring MVC注释。
翻译自: https://www.javacodegeeks.com/2019/05/spring-mvc-annotations.html