@Requestbody
@RequestBody 是一个在Java Web开发中常用的注解,特别是在使用Spring框架时。它主要用于将HTTP请求体中的数据绑定到方法的参数上。这个注解通常用于处理POST请求中的表单数据或JSON数据。通过@RequestBody注解,可以将请求体中的数据转换为指定的对象类型,从而方便在方法中进行处理。
基本用法
1.
处理JSON数据:当客户端发送POST请求时,请求体中的JSON数据可以自动转换为Java对象,并传递给控制器(Controller)的方法进行处理。例如,如果客户端发送了一个包含用户名和密码的JSON对象,控制器的方法可以使用@RequestBody注解来接收这个JSON对象,并将其转换为相应的Java对象。
@RestController
public class UserController {
@PostMapping(“/login”)
public ResponseEntity<User> login(@RequestBody User user) {
// 处理用户登录逻辑
return ResponseEntity.ok(user);
}
}
2.
处理表单数据:虽然@RequestBody主要用于处理JSON数据,但在某些情况下也可以用于处理表单数据。当请求的Content-Type为application/x-www-form-urlencoded时,@RequestBody可以将请求体中的表单数据绑定到方法的参数上。
@Bean
在Java的Spring框架中,@Bean 注解用于在Spring容器中声明一个bean。这个注解通常用在方法上,表明该方法会返回一个对象,Spring容器会管理这个对象的生命周期。使用 @Bean 注解的方法通常位于带有 @Configuration 注解的类中,这样的类被视为配置类。
当Spring容器启动时,它会查找带有 @Configuration 注解的类,并执行这些类中的带有 @Bean 注解的方法,将返回的对象注册为Spring管理的bean。
下面是一个简单的例子,展示了如何使用 @Bean 注解:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
在这个例子中,AppConfig 类被标记为配置类,因为它带有 @Configuration 注解。myService 方法被标记为 @Bean,意味着Spring容器会调用这个方法,并将返回的对象(MyServiceImpl 的一个实例)注册为一个bean。这个bean在Spring应用中可以通过依赖注入(DI)的方式被其他组件使用。
使用 @Bean 注解的好处是,它允许开发者以编程的方式定义bean的创建逻辑,提供了更大的灵活性。例如,可以在创建bean时执行一些初始化操作,或者根据不同的条件返回不同的bean实例。
@Bean 注解还可以与 @Scope、@DependsOn、@Lazy 等其他注解一起使用,以控制bean的范围、依赖关系和创建时机等属性。
@Override
在Java编程语言中,@Override 是一个注解(Annotation),用于指示一个方法声明打算覆盖(override)在超类(superclass)或实现的接口(interface)中的一个方法。使用 @Override 注解可以帮助开发者明确地表达他们的意图,并且让编译器检查该方法是否确实覆盖了超类或接口中的一个方法。
当使用 @Override 注解时,如果方法没有正确覆盖超类或接口中的任何方法,编译器将会报错。这有助于避免一些常见的错误,比如拼写错误或方法签名不匹配导致的方法没有正确覆盖。
下面是一个使用 @Override 注解的例子:public class Animal { public void makeSound() { System.out.println("Animal makes a sound"); } } public class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog barks"); } }在这个例子中,Dog 类中的 makeSound 方法使用了 @Override 注解,表明它打算覆盖 Animal 类中的 makeSound 方法。如果 Animal 类中没有 makeSound 方法,或者 Dog 类中的 makeSound 方法签名与超类中的不匹配,编译器将会报错。
@RestController
在Spring框架中,@RestController 是一个组合注解,它结合了 @Controller 和 @ResponseBody 注解的功能。@RestController 用于创建RESTful控制器,它告诉Spring框架这个类是一个控制器,而且它的方法返回的值应该直接写入HTTP响应体中,而不是视图名称。
使用 @RestController 注解的类通常用于处理Web请求,并返回数据而不是视图。这些数据通常是JSON或XML格式,用于构建RESTful API。
下面是一个简单的例子,展示了如何使用 @RestController:import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyRestController { @GetMapping(“/hello”) public String sayHello() { return “Hello, World!”; } }在这个例子中,MyRestController 类使用了 @RestController 注解,表明它是一个RESTful控制器。sayHello 方法使用了 @GetMapping 注解,表示它会响应对 /hello 路径的GET请求。当这个请求被发送时,sayHello 方法会返回字符串 “Hello, World!”,这个字符串将直接作为HTTP响应体返回给客户端。
@ResponseBody
在Spring框架中,@ResponseBody 是一个注解,用于指示一个方法的返回值应该直接写入HTTP响应体中。当一个方法被 @ResponseBody 注解标记时,Spring MVC框架会自动将该方法的返回值转换为适当的格式(如JSON或XML),并将其作为HTTP响应发送给客户端。
@ResponseBody 注解通常与 @Controller 或 @RestController 注解一起使用,用于创建处理Web请求的方法。在使用 @RestController 时,每个方法默认都是 @ResponseBody,因此通常不需要显式地使用 @ResponseBody 注解。
下面是一个使用 @ResponseBody 注解的例子

在这个例子中,MyController 类使用了 @RestController 注解,表明它是一个RESTful控制器。greeting 方法使用了 @GetMapping 注解,表示它会响应对 /greeting 路径的GET请求。@ResponseBody 注解表明方法返回的字符串 “Hello, World!” 应该直接写入HTTP响应体中。
当客户端向 /greeting 发送GET请求时,greeting 方法会被调用,返回的字符串 “Hello, World!” 将直接作为HTTP响应体返回给客户端。这种方式常用于构建RESTful Web服务,其中响应通常以JSON或XML格式返回。
@Controller
在Spring框架中,@Controller 注解是一个用于标记类的注解,它表明该类是一个Spring MVC控制器。控制器(Controller)是MVC(Model-View-Controller)架构模式中的一个组件,负责处理用户请求并返回响应。
使用 @Controller 注解的类可以包含处理HTTP请求的方法,这些方法通常使用其他注解如 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 等来指定它们处理的请求类型和路径。
当Spring应用启动时,它会扫描带有 @Controller 注解的类,并将这些类中的方法注册为处理特定请求的处理器。这些处理器方法可以返回视图名称、数据模型、直接响应体内容(使用 @ResponseBody 或 @RestController)等。
下面是一个简单的例子,展示了如何使用 @Controller 注解:

在这个例子中,MyController 类使用了 @Controller 注解,表明它是一个控制器。sayHello 方法使用了 @GetMapping 注解,表示它会响应对 /hello 路径的GET请求。当这个请求被发送时,sayHello 方法会返回字符串 “hello”,这通常会被Spring视图解析器解析为一个视图名称,用于渲染相应的视图。
@Controller 注解通常与 @RequestMapping 或其派生注解(如 @GetMapping, @PostMapping 等)一起使用,以定义控制器方法处理的请求路径和类型。此外,@Controller 类可以与 @Service 和 @Repository 注解的类一起,构成典型的分层架构。
@ExceptionHandler
在Spring框架中,@ExceptionHandler 是一个注解,用于处理控制器(Controller)中抛出的异常。通过使用这个注解,你可以定义一个方法来处理特定类型的异常,并返回一个自定义的响应给客户端。
@ExceptionHandler 注解通常用在控制器类中,或者用在控制器类的父类中,以便集中处理异常。使用这个注解可以让你的异常处理逻辑更加清晰和集中。
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.http.ResponseEntity;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseEntity<Object> handleException(Exception e) {
// 自定义异常处理逻辑
return ResponseEntity.status(500).body("An error occurred: " + e.getMessage());
}
}在这个例子中,GlobalExceptionHandler 类使用了 @ControllerAdvice 注解,表明它是一个全局异常处理器。@ExceptionHandler 注解用于指定这个方法要处理的异常类型,在这个例子中是 Exception 类型的所有异常。
当控制器中抛出异常时,Spring框架会自动调用这个方法,并将异常对象作为参数传递给它。然后,你可以在这个方法中定义如何处理这个异常,比如记录日志、返回错误信息给客户端等。
@ExceptionHandler 注解使得异常处理更加灵活和强大,允许开发者为不同的异常类型提供不同的处理逻辑,从而提高应用的健壮性和用户体验。
@Builder
@Builder 是 Lombok 库提供的一个注解,用于简化对象的构建过程。通过使用 @Builder 注解,可以生成一个静态内部类 Builder,这个类提供了一种链式调用的方式来创建和初始化对象。
使用场景
@Builder 注解特别适用于那些具有多个属性的类,尤其是当这些属性经常需要以不同的组合来创建对象时。使用 @Builder 可以避免编写冗长的构造函数或复杂的工厂方法,使代码更加简洁和易于维护。
示例
假设有一个 User 类,我们希望使用 @Builder 注解来简化其对象的创建过程
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
private String email;
@Builder
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
}
在这个例子中,@Builder 注解被添加到 User 类上。Lombok 会自动生成一个 UserBuilder 类,允许我们以链式调用的方式创建 User 对象:
User user = User.builder()
.name("John Doe")
.age(30)
.email("john.doe@example.com")
.build();
注意事项
- 使用
@Builder注解时,Lombok 会生成一个Builder类,该类包含与原类同名的静态方法builder(),以及与原类属性同名的setter方法。 @Builder注解可以与@Data、@Getter、@Setter等其他 Lombok 注解一起使用,以提供完整的对象构建和访问控制功能。@Builder注解生成的Builder类是线程安全的,可以用于并发环境。
通过使用 @Builder 注解,可以极大地简化复杂对象的创建过程,使代码更加清晰和易于理解。

Builder是一个构建器
元注解

例如:
@Target(ElementType.METHOD)//表示只能加在方法上
@Retention(RetentionPolicy.RUNTIME)//表明该注解在运行时也能被识别到
//@ AutoFill注解被标记为 @Retention(RetentionPolicy.RUNTIME),这意味着它可以在运行时被访问。
public @interface AutoFill {
//数据库操作类型,INSERT
OperationType value();
//Target 表示我们的注解可以用在哪些地方
//Retenton 表示我们的注解在什么时候有效
runtime>class>sources
//Documented 表示是否将我们的注解生成在JAVAdoc当中
//Inherited表示子类可以继承父类当中的注解