当前位置: 首页 > article >正文

初学springboot注解

@Api 注解用于类上,描述了整个控制器的基本信息。
@ApiOperation 注解用于方法上,描述了具体 API 操作的详细信息。
注解中的主要属性包括:
value:对操作的简单描述。
notes:对操作的详细说明。
response:指定返回类型的类。
responseContainer:指定返回类型是单个对象还是集合(如 List)。

@RestController
@RequestMapping("/api")
@Api(value = "用户管理", tags = {"用户管理"})
public class UserController {
    @GetMapping("/users")
    @ApiOperation(value = "获取所有用户", notes = "返回所有用户的信息", response = User.class, responseContainer = "List")
    public List<User> getAllUsers() {
        // 方法实现
        return new ArrayList<>();
    }
}

@RequiredArgsConstructor
Lombok 库中的一个注解,用于自动生成一个包含所有 final 字段和带有 @NonNull 注解字段的构造函数:

import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;
    private final EmailService emailService;
}

@RequestMapping
1.用在类上时,它定义了该控制器所有处理请求的公共前缀
2.用在方法上时,它定义了具体的请求路径和处理方法

@RestController
@RequestMapping("/api")
public class MyController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "Hello, World!";
    }
}

/api/hello 这个 URL 将映射到 hello 方法。

@RequestMapping注解有许多属性,常用的包括:
value 或 path:指定请求的 URL 路径。
method:指定 HTTP 请求的方法(如 GET、POST 等)。
params:指定请求的参数。
headers:指定请求头。
consumes:指定处理请求的提交内容类型(Content-Type)。
produces:指定返回请求的内容类型(Accept)。

@RequestMapping(value = "/users", method = RequestMethod.POST, consumes = "application/json", produces = "application/json",produces = "application/json;charset=utf-8")
public ResponseEntity<User> createUser(@RequestBody User user) {
    // 方法实现
}

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping 等。这些注解实际上是 @RequestMapping 的简化版

@GetMapping("/users")
public List<User> getUsers() {
    // 方法实现
}

等价于

@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getUsers() {
    // 方法实现
}

@Controller
用于标识一个类是 Spring MVC 控制器,Spring 会自动检测到这个类,并将其注册为一个 Spring Bean。这个类中的方法可以处理特定的 HTTP 请求,并返回相应的视图或数据。

@Controller
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    @ResponseBody
    public String sayHello() {
        return "Hello, World!";
    }
}

@Controller 注解标识了 HelloController 类是一个控制器。
@RequestMapping(“/hello”) 注解定义了控制器的根路径是 /hello。
@GetMapping 注解定义了 sayHello 方法处理 /hello 路径的 GET 请求。
@ResponseBody 注解表示 sayHello 方法的返回值将直接作为 HTTP 响应体返回,而不是返回视图名称。

@RestController
@Controller 通常与视图解析器(ViewResolver)一起使用,以便将控制器方法的返回值解析为视图名称。如果你希望直接返回数据(而不是视图名称),可以使用@RestController 注解 ,它是 @Controller 和 @ResponseBody 的组合注解。

http请求相关:
@RequestParam
是 Spring Framework 中的一个注解,用于处理 HTTP 请求中的查询参数或表单参数。它可以用在方法参数前,以便从请求中提取参数值
假设你有一个 URL 路径 /greeting?name=John,你可以使用 @RequestParam 来获取 name 参数的值:

@RestController
public class GreetingController {
    @GetMapping("/greeting")
    public String greeting(@RequestParam String name) {
        return "Hello, " + name + "!";
    }
}

你可以为 @RequestParam 设置一个默认值,以防请求中没有提供该参数:

@GetMapping("/greeting")
public String greeting(@RequestParam(defaultValue = "World") String name) {
    return "Hello, " + name + "!";
}

可以通过设置 required 属性为 false 来使参数成为可选的:

@GetMapping("/greeting")
public String greeting(@RequestParam(required = false) String name) {
    if (name == null) {
        name = "World";
    }
    return "Hello, " + name + "!";
}

也可以用于接收多个相同名称的参数值:
…/favoriteColors?colors=red&colors=blue&colors=green

@GetMapping("/ favoriteColors")
public String favoriteColors(@RequestParam List<String> colors) {
    return "Your favorite colors are: " + colors;
}

@RequestBody
是 Spring Framework 中的一个注解,用于将 HTTP 请求体(body)转换为 Java 对象。它通常用于处理 POST 或 PUT 请求,其中客户端发送的数据包含在请求体中。
请求体:
{
“name”: “John”,
“age”: 30
}
在这个例子中,@RequestBody User user 将请求体中的 JSON 对象转换为 User 类型的 Java 对象。

@RestController
public class UserController {
	//通过 consumes 属性来指定处理请求体的内容类型(Content-Type)
    @PostMapping("/users", consumes = "application/json")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.getName();
    }
}

你可以使用 Jackson 或 Gson 等库来自定义请求体的反序列化过程。例如,如果你使用 Jackson,你可以通过在类上添加 @JsonDeserialize 注解来自定义反序列化过程

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = CustomUserDeserializer.class)
public class User {
    private String name;
    private int age;
    // getters and setters
}

@PathVariable
是 Spring Framework 中的一个注解,用于将 URL 路径中的模板变量绑定到方法参数上

@RestController
public class UserController {
    @GetMapping("/users/{userId}/orders/{orderId}")
	public String getOrderForUser(@PathVariable String userId, @PathVariable String orderId) {
    	return "User ID: " + userId + ", Order ID: " + orderId;
	}
}

@Repository
是 Spring Framework 中的一个注解,用于标识一个类是数据访问层的组件。数据访问层通常负责与数据库进行交互,执行 CRUD(创建、读取、更新、删除)操作。

当一个类被 @Repository 注解时,Spring 会自动检测到这个类,并将其注册为一个 Spring Bean。这个类中的方法可以包含与数据库交互的逻辑,并可以被服务层(如 Service)调用。

import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
    public User findById(Long id) {
        // 实现数据库查询逻辑
        return new User();
    }
}

@Repository 注解通常与 @Autowired 注解一起使用,以便自动装配依赖。例如,你可以在服务层中使用 @Autowired 注解来注入

@Autowired
是 Spring Framework 中的一个注解,用于自动装配 Bean。它可以用在构造函数、字段或方法上,以便 Spring 容器自动注入依赖。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
	//字段注入(可以通过设置 required 属性为 false 来使注入成为可选的)
	//可选注入 @Autowired(required = false)
	//如果 Spring 容器中没有 UserRepository 类型的 Bean,那么 userRepository 将被注入为 null。
    @Autowired
    private UserRepository userRepository;
	
	//构造函数注入
	@Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

	//在方法上使用 @Autowired 注解,以便 Spring 通过方法注入依赖
	 @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

@Service
是 Spring Framework 中的一个注解,用于标识一个类是服务层的组件。服务层通常包含业务逻辑,负责调用数据访问层(如 DAO 或 Repository)的代码,并可能包含一些额外的业务规则或逻辑。
当一个类被 @Service 注解时,Spring 会自动检测到这个类,并将其注册为一个 Spring Bean。这个类中的方法可以包含业务逻辑,并可以被其他组件(如控制器)调用。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    private final UserRepository userRepository;
    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    public User getUserById(Long id) {
        // 调用 userRepository 获取用户信息
        return userRepository.findById(id);
    }
}

@Service 注解标识了 UserService 类是一个服务组件。
UserService 类包含业务逻辑方法,如 getUserById。
@Autowired 注解用于注入 UserRepository 类型的依赖。
@Service 注解通常与 @Autowired 注解一起使用,以便自动装配依赖。此外,Spring 还提供了其他类似的注解,如 @Component、@Repository 和 @Controller,用于标识不同类型的组件。
@Component:这是一个通用的组件注解,可以用于任何类型的组件。
@Repository:这个注解通常用于数据访问层的组件,如 DAO 或 Repository。
@Controller:这个注解用于控制器组件,负责处理用户请求。

@Data
Lombok 库中的一个注解,它是一个方便的注解,可以减少样板代码。@Data 注解会为类自动生成以下内容:
@Getter:为所有字段生成 getter 方法。
@Setter:为所有非 final 字段生成 setter 方法。
@ToString:生成 toString 方法。
@EqualsAndHashCode:生成 equals 和 hashCode 方法。
@RequiredArgsConstructor:生成一个包含所有 final 字段和带有 @NonNull 注解字段的构造函数。

import lombok.Data;
@Data
public class User {
    private Long id;
    private String name;
    private int age;
}

@Param
是 MyBatis 框架中的一个注解,用于将方法参数传递给 SQL 语句。它通常与 @Select、@Insert、@Update 和 @Delete 等注解一起使用,以便在 XML 映射文件中引用这些参数。

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User findById(@Param("id") Long id);
}

@Select 注解定义了一个 SQL 查询语句。
#{id} 是 SQL 语句中的参数占位符,它将被方法参数 id 的值替换。
@Param(“id”) 注解将方法参数 id 绑定到 SQL 语句中的参数占位符 #{id}。


http://www.kler.cn/a/542977.html

相关文章:

  • .NET Web-静态文件访问目录浏览
  • 香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。
  • MapReduce到底是个啥?
  • 为什么mysql默认RR(repeat read可重复读)隔离级别
  • (五)C++的类继承、多态、组合
  • k8s证书过期怎么更新?
  • 【计算机网络】TCP/IP 网络模型有哪几层?
  • UI-设计规范大小总结
  • 4G/5G路由器链路检查作业指导
  • 14.1 AutoGPT 项目深度解析:为什么它能掀起自主智能体开发革命?
  • 安防机器人电源解决方案
  • 网络在线考试|基于vue的网络在线考试系统的设计与实现(源码+数据库+文档)
  • Python自动化办公之批量重命名
  • MySQL 动态分区管理:自动化与优化实践
  • PortSwigger——WebSockets vulnerabilities
  • 【GeeRPC】Day5:支持 HTTP 协议
  • 浙江大华社招面试
  • PyTorch 中 `torch.cuda.amp` 相关警告的解决方法
  • 手撕Transformer编码器:从Self-Attention到Positional Encoding的PyTorch逐行实现
  • MySQL主从复制过程,延迟高,解决应对策略
  • MS08067练武场--WP
  • IntelliJ IDEA Console控制台输出成json的配置方式
  • 4、k8s的pod详解
  • 公开免费的API集合
  • 嵌入式音视频开发(零)移植ffmpeg及推流测试
  • Spring Boot 配置 Mybatis 读写分离