Java后端是如何进行数据交换的

        看了很多网站都没详细讲解java后端是怎么数据交换的,特别是看B站视频时,一些教程十分详细,反而缺少了一些总体上的讲解。使得像我这类初学者学的十分懵懂,所以,我总结了SpringMVC及SpringBoot中数据是如何交换的。

        首先,经典的SpringMVC中有着Service层,Control层和Dao层。

  1. DAO层(Data Access Object):负责与数据源(数据库)进行交互,封装数据访问逻辑,对数据库进行增删改查操作。通常使用MyBatis或者JDBC来实现。DAO层的方法通常返回数据对象或者集合。

  2. Service层:负责业务逻辑的处理,提供服务接口供Control层调用,处理事务管理、数据校验、数据处理等。Service层一般依赖于DAO层来获取数据,并对数据进行处理、组装等操作,然后返回给Controller层。

  3. Controller层:负责接收和处理来自前端的请求,调用Service层提供的服务接口,并将结果封装为响应返回给前端。Controller层主要负责请求的路由、参数解析、验证、异常处理等,通过调用Service层的方法来获取和处理数据。

数据交换通常通过参数传递和返回值来实现:

  • Controller层通过参数接收来自前端的请求数据,并将其传递给Service层的方法。
  • Service层根据业务逻辑的需要,可能会调用DAO层的方法来获取数据,然后对数据进行处理和组装。
  • Service层将处理后的数据通过返回值返回给Controller层,Controller层再将其封装为响应返回给前端。
  • 示例:

    @Controller
    @RequestMapping("/users")
    public class UserController {
        
        @Autowired
        private UserService userService;
    
        @GetMapping("/{id}")
        public ResponseEntity<UserDTO> getUser(@PathVariable("id") int id) {
            User user = userService.getUserById(id);
            if (user != null) {
                // 数据转换,将User对象转换成UserDTO对象
                UserDTO userDTO = convertToDTO(user);
                return ResponseEntity.ok(userDTO);
            } else {
                return ResponseEntity.notFound().build();
            }
        }
        
        // 其他请求处理方法...
    }
    

    在上述示例中,Controller层通过@Autowired注解将UserService注入进来,然后调用UserService的方法来获取User对象。Controller层再将User对象转换成UserDTO对象,最后封装为响应返回给前端。数据交换主要是通过参数传递和返回值来实现的。

        

        其次,后端是如何和前端数据进行交换的呢?

        主要是javaweb中学到的request和response,中翻一下就是“请求”和“响应”,请求是前端向后端发送数据的过程中,常见的请求方式有Get和Post两种方式,两者区别即:Get是浏览器将请求头和请求体一起发出给服务器,如果状态码为200,即成;Post是浏览器先将请求头发出,报100,成功,再发送请求体,报200,成功。具体更多区别请看HTTP 方法:GET 对比 POST | 菜鸟教程

此链接,

        我所要讲解的是在Restful风格下,我们如何利用注解对数据的交换:

  1. @RequestMapping:用于将方法映射到特定的URL路径,处理客户端的请求。底层逻辑见。

  2. @PathVariable:用于将URL路径中的变量(占位符)映射到方法的参数上。通过该注解,可以获取URL中的特定路径变量,并作为方法的参数传递。底层逻辑为通过解析URL路径,将变量值传递给方法参数。

  3. @RequestParam:用于获取请求参数的值。通过该注解,可以获取URL中的查询参数或者表单提交的参数,并将其赋值给方法的参数。底层逻辑为通过解析请求,获取对应的参数值,并将其转换为方法参数的数据类型。

  4. @RequestBody:用于将请求体中的数据绑定到方法的参数上。通过该注解,可以获取请求体中的数据,并将其转换为方法参数的数据类型。底层逻辑为先将请求体中的数据读取出来,然后使用转换器(如JSON转换器)将其转换为方法参数的数据类型。

  5. @ResponseBody:用于将方法的返回值直接作为响应体返回给客户端。通过该注解,可以将方法的返回值转换为响应体的数据类型(如JSON、XML等),并发送给客户端。底层逻辑为将方法返回值转换为响应体的数据类型,然后发送给客户端。

  6. @ResponseStatus:用于指定方法执行成功后的响应状态码。通过该注解,可以定义方法执行成功后返回的HTTP状态码。底层逻辑为在方法执行完成后,设置响应的状态码。

示例:

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<UserDTO> getUser(@PathVariable("id") int id) {
        User user = userService.getUserById(id);
        if (user != null) {
            UserDTO userDTO = convertToDTO(user);
            return ResponseEntity.ok(userDTO);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @PostMapping
    public ResponseEntity<Void> createUser(@RequestBody UserDTO userDTO) {
        User user = convertToUser(userDTO);
        userService.createUser(user);
        return ResponseEntity.status(HttpStatus.CREATED).build();
    }
    
    // 其他请求处理方法...
}

在上述示例中,使用了@RequestParam、@PathVariable、@RequestBody和@ResponseBody等注解来处理请求和响应。通过这些注解,可以方便地获取和处理请求参数,将请求体数据绑定到方法参数,以及将方法的返回值作为响应体返回给客户端。底层逻辑为根据注解的功能,解析请求,提取参数值或者请求体数据,并根据需求进行数据转换和处理,最后返回响应给客户端。

点点关注吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值