Spring 注解 和SpringMVC注解

发布时间:2024年01月12日

Spring和Spring MVC是两个紧密相关但又不同的框架,它们都使用一系列注解来简化开发。以下是Spring和Spring MVC中一些常用的注解:

### Spring 注解:

1. **`@Component`:**
? ?- 用于将类标记为Spring容器中的组件,由Spring自动扫描并进行管理。
? ?- 具体的派生注解有`@Service`、`@Repository`、`@Controller`等,用于表示不同类型的组件。

2. **`@Autowired`:**
? ?- 用于进行依赖注入,将一个bean注入到另一个bean中。
? ?
? ?```java
? ?@Service
? ?public class MyService {

? ? ? ?private final MyRepository repository;

? ? ? ?@Autowired
? ? ? ?public MyService(MyRepository repository) {
? ? ? ? ? ?this.repository = repository;
? ? ? ?}
? ?}
? ?```

3. **`@Configuration`:**
? ?- 用于定义配置类,替代XML配置文件。
? ?
? ?```java
? ?@Configuration
? ?public class AppConfig {

? ? ? ?@Bean
? ? ? ?public MyService myService() {
? ? ? ? ? ?return new MyService();
? ? ? ?}
? ?}
? ?```

4. **`@Value`:**
? ?- 用于注入外部配置属性的值。
? ?
? ?```java
? ?@Service
? ?public class MyService {

? ? ? ?@Value("${my.property}")
? ? ? ?private String myProperty;
? ?}
? ?```

### Spring MVC 注解:

1. **`@Controller`:**
? ?- 用于标记一个类作为Spring MVC的控制器。
? ?
? ?```java
? ?@Controller
? ?public class MyController {

? ? ? ?@RequestMapping("/hello")
? ? ? ?public String sayHello() {
? ? ? ? ? ?return "hello";
? ? ? ?}
? ?}
? ?```

2. **`@RequestMapping`:**
? ?- 用于映射HTTP请求的URL到具体的控制器方法。
? ?
? ?```java
? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {

? ? ? ?@RequestMapping("/path")
? ? ? ?public String handleRequest() {
? ? ? ? ? ?return "view";
? ? ? ?}
? ?}
? ?```

3. **`@RequestParam`:**
? ?- 用于从请求中获取参数值。
? ?
? ?```java
? ?@Controller
? ?public class MyController {

? ? ? ?@RequestMapping("/greet")
? ? ? ?public String greet(@RequestParam("name") String name) {
? ? ? ? ? ?return "Hello, " + name + "!";
? ? ? ?}
? ?}
? ?```

4. **`@ResponseBody`:**
? ?- 用于指示方法返回的对象应该被写入响应体。
? ?
? ?```java
? ?@RestController
? ?public class MyRestController {

? ? ? ?@RequestMapping("/data")
? ? ? ?@ResponseBody
? ? ? ?public Map<String, String> getData() {
? ? ? ? ? ?Map<String, String> data = new HashMap<>();
? ? ? ? ? ?data.put("key", "value");
? ? ? ? ? ?return data;
? ? ? ?}
? ?}
? ?

在Spring MVC中,用于映射请求方法的注解有几种,具体选择取决于你希望处理的HTTP请求类型以及处理方式。以下是一些常见的请求方法注解:

1. **`@RequestMapping`:**
? ?- `@RequestMapping`是最通用的映射注解,可以用于映射多个HTTP请求方法。可以用在类级别和方法级别。地位等同于@WebServlet
? ?- 可以通过`method`属性指定请求方法。

? ?```java
? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {

? ? ? ?@RequestMapping(value = "/path", method = RequestMethod.GET)
? ? ? ?public String handleGetRequest() {
? ? ? ? ? ?return "view";
? ? ? ?}

? ? ? ?@RequestMapping(value = "/path", method = RequestMethod.POST)
? ? ? ?public String handlePostRequest() {
? ? ? ? ? ?// Handle POST request
? ? ? ? ? ?return "view";
? ? ? ?}
? ?}
? ?```

2. **`@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping`等:**
? ?- 这些是`@RequestMapping`的缩写形式,分别用于处理GET、POST、PUT、DELETE等HTTP请求方法。
? ?
? ?```java
? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {

? ? ? ?@GetMapping("/path")
? ? ? ?public String handleGetRequest() {
? ? ? ? ? ?return "view";
? ? ? ?}

? ? ? ?@PostMapping("/path")
? ? ? ?public String handlePostRequest() {
? ? ? ? ? ?// Handle POST request
? ? ? ? ? ?return "view";
? ? ? ?}
? ?}
? ?```

3. **`@RequestMapping`的缩写注解:**
? ?- `@GetMapping`、`@PostMapping`等都是`@RequestMapping`的缩写形式,用于简化代码。
? ?
? ?```java
? ?@Controller
? ?@RequestMapping("/example")
? ?public class ExampleController {

? ? ? ?@GetMapping("/path")
? ? ? ?public String handleGetRequest() {
? ? ? ? ? ?return "view";
? ? ? ?}

? ? ? ?@PostMapping("/path")
? ? ? ?public String handlePostRequest() {
? ? ? ? ? ?// Handle POST request
? ? ? ? ? ?return "view";
? ? ? ?}
? ?}
? ?```

4. **`@RequestMapping`中的`consumes`和`produces`属性:**
? ?- 通过`consumes`属性指定接受的请求的`Content-Type`,通过`produces`属性指定产生的响应的`Content-Type`。
? ?
? ?```java
? ?@Controller
? ?@RequestMapping(value = "/example", consumes = "application/json", produces = "application/json")
? ?public class ExampleController {

? ? ? ?@RequestMapping(value = "/path", method = RequestMethod.POST)
? ? ? ?public String handleJsonPostRequest(@RequestBody MyObject myObject) {
? ? ? ? ? ?// Handle JSON POST request
? ? ? ? ? ?return "view";
? ? ? ?}
? ?}

在Spring MVC中,有一些用于注解响应类的注解,用于配置响应的一些属性。以下是一些常用的响应类注解:

1. **`@ResponseBody`:**
? ?- 用于指示方法返回的对象应该被写入响应体。
? ?- 通常用于RESTful风格的控制器方法,以返回JSON、XML等格式的数据。

? ?```java
? ?@RequestMapping("/example")
? ?@ResponseBody
? ?public String example() {
? ? ? ?return "This is a response body.";
? ?}
? ?```

2. **`@RestController`:**
? ?- 与`@Controller`相似,但它的每个方法都默认使用`@ResponseBody`注解。
? ?- 适用于构建RESTful API。

? ?```java
? ?@RestController
? ?@RequestMapping("/api")
? ?public class ExampleRestController {

? ? ? ?@RequestMapping("/data")
? ? ? ?public Map<String, String> getData() {
? ? ? ? ? ?Map<String, String> data = new HashMap<>();
? ? ? ? ? ?data.put("key", "value");
? ? ? ? ? ?return data;
? ? ? ?}
? ?}
? ?```

3. **`@ResponseStatus`:**
? ?- 用于指定控制器方法的响应状态码和原因短语。

? ?```java
? ?@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource not found")
? ?public class ResourceNotFoundException extends RuntimeException {
? ? ? ?// ...
? ?}
? ?```

4. **`@ModelAttribute`:**
? ?- 用于将方法返回的对象添加到模型中,使其可以在视图中使用。
? ?- 不直接影响响应,但与响应有关,因为它可以影响到视图的渲染。

? ?```java
? ?@RequestMapping("/example")
? ?public String example(Model model) {
? ? ? ?MyObject myObject = new MyObject();
? ? ? ?model.addAttribute("myObject", myObject);
? ? ? ?return "exampleView";
? ?}
? ?```

这些注解可以根据你的应用程序的需要进行组合使用,以实现所需的功能。

? ?```

这些注解允许你根据不同的HTTP请求方法和其他条件来映射不同的处理方法。你可以根据具体的需求选择适当的注解。

文章来源:https://blog.csdn.net/m0_65037354/article/details/135489129
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。