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

JavaWeb常见注解

目录

1.@Controller

2.@Requestbody

3.@RequestMapping

4.@Component

5.@Autowired & @Resource


1.@Controller

在 JavaWeb 开发中,@Controller是 Spring 框架中的一个注解,主要用于定义控制器类(Controller),是 Spring MVC 模式的核心组件之一。它表示该类是一个 Spring MVC 控制器,用来处理 HTTP 请求并返回相应的视图或数据。

@Controller 的典型用法:

  • @Controller:将 UserController 类标记为控制器,Spring 会自动扫描该类并将其作为处理 HTTP 请求的组件
  • @RequestMapping("/users"):设置基础路径 /users,该路径会应用到类中的所有方法
  • @GetMapping("/list"):表示处理 GET 请求,路径为 /users/list,并返回一个名为 userList 的视图
  • @GetMapping("/{id}"):通过路径变量({id})接收动态路径部分并返回视图
  • Model:用于在控制器方法中传递数据到视图。model.addAttribute("users", users)users 数据传递到视图中 
@Controller
@RequestMapping("/users")
public class UserController {

    // 假设我们有一个 User 类
    public static class User {
        private String name;
        private int age;

        // getters and setters
    }

    // 显示用户列表页面
    @GetMapping("/list")
    public String showUsers(Model model) {
        List<User> users = new ArrayList<>();
        users.add(new User("Alice", 30));
        users.add(new User("Bob", 25));
        model.addAttribute("users", users); // 将数据传递给视图
        return "userList"; // 返回视图名称
    }

    // 显示用户详情页面
    @GetMapping("/{id}")
    public String showUser(@PathVariable("id") int id, Model model) {
        User user = new User("Charlie", 35); // 假设从数据库获取用户
        model.addAttribute("user", user);
        return "userDetail"; // 返回视图名称
    }
}

2.@Requestbody

在 Java Web 开发中,@RequestBody 是 Spring 框架中的一个注解,主要用于将 HTTP 请求的请求体(request body)映射为方法的参数。

具体来说就是,@RequestBody 注解会将 HTTP 请求的正文部分(通常是 JSON 或 XML 格式的数据)自动转换为 Java 对象。例如,当客户端发送一个包含 JSON 数据的 POST 请求时,Spring 会将这些 JSON 数据反序列化成 Java 对象,如下所示,接收一个 JSON 格式的请求体,并将其转换为 Java 对象:

@RestController
public class UserController {

    // 假设我们有一个 User 类
    public static class User {
        private String name;
        private int age;

        // getters and setters
    }

    @PostMapping("/users")
    public String createUser(@RequestBody User user) {
        // 自动将请求体中的 JSON 数据转换成 User 对象
        return "User created: " + user.getName() + ", age: " + user.getAge();
    }
}

解析:

  • @RequestBody:它会将 HTTP 请求的 Body 部分转换为方法参数。在这个例子中,它会将客户端发送的 JSON 数据映射到 User 类对象的字段上
  • @PostMapping("/users"):这个注解表示一个 POST 请求,客户端通过请求体发送一个用户信息(如 JSON 格式),Spring 会自动解析这个请求体,并使用 @RequestBody 注解将其转换成 User 对象

如果客户端发送以下JSON数据:

{
  "name": "John Doe",
  "age": 30
}

那么在 createUser 方法中,user 对象会被自动填充为:

user.name = "John Doe";
user.age = 30;

3.@RequestMapping

@RequestMapping 是 Spring 框架中用于处理 HTTP 请求的核心注解之一。它可以用于类级别和方法级别,标识一个方法或类与特定的 HTTP 请求(如 GET、POST、PUT、DELETE)映射关系,从而让 Spring 框架能够将 HTTP 请求路由到对应的处理方法。

Spring 为 @RequestMapping提供了更具体的注解,用于简化 @RequestMapping 的使用:

  •  @GetMapping:专门用于处理 GET 请求
  • @PostMapping:专门用于处理 POST 请求
  • @PutMapping:专门用于处理 PUT 请求
  • @DeleteMapping:专门用于处理 DELETE 请求
  • @PatchMapping:专门用于处理 PATCH 请求 

 这些注解是 @RequestMapping 的快捷方式,适用于常见的 HTTP 请求方法,减少了代码的冗余

@RequestMapping 的使用示例:类级别和方法级别的结合使用

  •  @RequestMapping("/users"):在类级别指定基本的 URL 路径 /users,该路径会应用到类中的所有方法 
  • @GetMapping@PostMapping@RequestMapping 的快捷方式,分别处理 GETPOST 请求 
@RestController
@RequestMapping("/users")
public class UserController {

    // 处理 GET 请求,路径为 "/users"
    @GetMapping
    public List<User> getAllUsers() {
        List<User> users = new ArrayList<>();
        users.add(new User("Alice", 30));
        users.add(new User("Bob", 25));
        return users;  // 返回用户列表,默认会转化为 JSON
    }

    // 处理 POST 请求,路径为 "/users"
    @PostMapping
    public User createUser(@RequestBody User user) {
        return user;  // 接收 JSON 数据并返回创建的用户对象
    }
}

4.@Component

在 Java Web 开发中,@Component 注解是 Spring 框架提供的一个非常重要的注解,用来声明一个类是 Spring 容器中的一个组件,使得该类的实例可以被自动注册到 Spring 容器中进行管理。这样,你就可以利用 Spring 提供的依赖注入(DI)功能,将该组件注入到其他类中,以下是@Component 注解使用步骤:

1.@Component 声明

@Component 通常用于类的声明上,表示该类是一个 Spring 管理的 Bean:

import org.springframework.stereotype.Component;

@Component
public class MyService {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

2.Spring scan扫描

Spring 默认会扫描带有 @Component 注解的类(以及其他派生注解,如 @Service@Repository@Controller 等),并将其注册为 Spring 管理的 Bean。为了让 Spring 知道去扫描这些组件,通常会在配置类中使用 @ComponentScan 注解指定包扫描路径

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.example") // 指定要扫描的包
public class AppConfig {
    // Spring 会自动扫描并注册包中的 @Component 注解的类
}

3.自动装配

使用 @Autowired 注解可以将 @Component 注解的类实例注入到其他类中:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyController {

    @Autowired
    private MyService myService;

    public void startProcess() {
        myService.doSomething();
    }
}

@Service@Repository@Controller 都是 @Component 的派生注解,它们与 @Component 有相同的功能,但用于不同的层次:

  • @Service:通常用于业务层服务类
  • @Repository:通常用于数据访问层类
  • @Controller:通常用于控制器类(用于 MVC 控制器)
  • @Component:用于普通的 Bean 类

5.@Autowired & @Resource

@Autowired和@Resource都是用于依赖注入(DI)的注解,但是@Autowired注解是Spring框架提供的注解,它根据类型进行自动装配;@Resource注解是JavaEE提供的注解,它提供了更灵活的方式进行依赖对象的查找,可以按照名称或类型进行注入

@Component
public class UserService {
    @Autowired
    private User user;
}

@Component
public class UserService {
    @Resource
    private User user;
}

在上述示例中,使用@Autowired注解将User对象注入到UserService类中,Spring容器会根据UserRepository类型进行自动装配,并将匹配的Bean注入到user字段中;@Resource注解默认按照字段名进行依赖对象的查找和匹配,也可以通过name属性指定依赖对象的名称,它们的区别是: 

  • @Autowired注解是Spring提供的,用于自动装配Bean依赖。它可以通过类型匹配来自动注入依赖对象,但如果存在多个符合条件的候选对象时,默认使用byType的方式进行自动装配
  • @Resource注解是JavaEE提供的,也可以用于自动装配依赖对象。它可以通过名称匹配来自动注入依赖对象,默认使用byName的方式进行自动装配

其他JavaWeb开发常见注解:17.1 JavaWeb-常用注解_java web 判断请求参数注解-CSDN博客


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

相关文章:

  • MySQL与Oracle对比及区别
  • WebGIS三维地图框架--Cesium
  • 解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url
  • Vue 3 介绍及应用
  • vue3 pdf base64转成文件流打开
  • Unity3D
  • Flutter【05】企业级Flutter架构实践
  • 鸿蒙生态:开发者的新征程与挑战并存
  • conda和pip的镜像源配置和删除
  • 在双显示器环境中利用Sunshine与Moonlight实现游戏串流的同时与电脑其他任务互不干扰
  • k8s拓扑域 :topologyKey
  • 快递物流查询API接口如何用C#调用
  • Docker 安装Immich教程
  • 【Linux】内核模版加载modprobe | lsmod
  • 【Java Web】分页查询
  • 材质(二)——材质参数化,从源材质继承生成不同的材质实例
  • Lodash的常用方法整理
  • 上头:5个电脑必装的神级软件,一个比一个好用
  • lambdaQueryWrapper详细解释
  • 【菜笔cf刷题日常-1400】C. RationalLee(贪心)
  • 蓝桥杯每日真题 - 第11天
  • 轻松上手:使用Docker部署Java服务
  • openGauss常见问题与故障处理(四)
  • 量化交易系统开发-实时行情自动化交易-3.4.1.6.A股宏观经济数据
  • 边缘计算在工业互联网中的应用
  • SystemVerilog学习笔记(九):Schedule