每日面经分享(SpringBoot part4:Controller层)

news2024/11/26 19:35:49
  1. SpringBoot Controller层的作用
    a. 请求映射:Controller层使用注解(如@RequestMapping、@GetMapping、@PostMapping等)将HTTP请求映射到相应的方法上。这些方法根据URL路径、请求方法、请求参数等来决定要执行的操作。
    b. 参数解析:Controller层负责解析HTTP请求中的参数(如路径参数、查询参数、表单参数、请求体等),并将它们传递给相应的方法。Spring Boot提供了各种注解(如@PathVariable、@RequestParam、@RequestBody等)来方便参数的解析和绑定。
    c. 业务逻辑调用:一旦接收到HTTP请求和相关参数,Controller层会调用相应的Service层方法来处理业务逻辑。将传递参数给Service层,并接收返回值。Controller层可以将业务逻辑与用户界面解耦,实现代码的模块化和重用。
    d. 数据封装和返回:Controller层负责将业务逻辑处理的结果封装成适当的数据结构,并通过HTTP响应返回给客户端。这可以是JSON、XML、HTML等形式的数据。Spring Boot提供了各种注解(如@ResponseBody、@RestController等)来方便数据的封装和返回。
    e. 异常处理:Controller层也负责处理异常情况。使用try-catch块来捕获异常,并根据需要进行适当的处理(如返回错误信息、重定向等)。Spring Boot还提供了@ExceptionHandler注解来定义全局异常处理方法,以统一处理应用程序中的异常。
  2. SpringBoot Controller层搭建过程
    a. 创建Controller类:创建一个名为UserController的类,并添加@RestController注解进行标识。
    b. 依赖注入Service层:在Controller类中,通过构造函数注入UserService实例。这样可以在Controller中使用Service层提供的业务逻辑功能。
    c. 处理HTTP请求:使用各种注解(如@GetMapping、@PostMapping、@PutMapping、@DeleteMapping等)来处理不同类型的HTTP请求。根据请求的URL路径和参数,调用相应的方法来处理请求。
    d. 参数解析:在方法参数中使用注解(如@PathVariable、@RequestBody等)来解析HTTP请求中的参数。这些注解可以将路径参数、请求体等绑定到方法参数上,方便后续处理。
    e. 业务逻辑处理:在方法中调用UserService中的方法来处理业务逻辑。根据需要对数据进行处理和转换,以满足应用程序的需求。
    f. 数据封装和返回:根据业务逻辑处理的结果,将数据封装成适当的数据结构,并通过方法的返回值进行返回。使用ResponseEntity来包装返回结果,可以设置响应状态码和响应头等信息。
@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

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

    @GetMapping("/")
    public ResponseEntity<List<UserDTO>> getAllUsers() {
        List<UserDTO> users = userService.getAllUsers();
        if (!users.isEmpty()) {
            return ResponseEntity.ok(users);
        } else {
            return ResponseEntity.noContent().build();
        }
    }

    @PostMapping("/")
    public ResponseEntity<Void> saveUser(@RequestBody CreateUserRequest request) {
        Long userId = userService.saveUser(request);
        URI location = ServletUriComponentsBuilder.fromCurrentRequest()
                .path("/{id}")
                .buildAndExpand(userId)
                .toUri();
        return ResponseEntity.created(location).build();
    }

    @PutMapping("/{id}")
    public ResponseEntity<Void> updateUser(@PathVariable Long id, @RequestBody UpdateUserRequest request) {
        userService.updateUser(id, request);
        return ResponseEntity.ok().build();
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.ok().build();
    }
}

互联网大厂测开经历,目前担任测试开发负责人,每天分享互联网面经,如果你有测试相关的问题,欢迎咨询,海鲜市场【简历优化】、【就业指导】、【模拟/辅导面试】,已辅导20位以上同学拿到心仪offer

海鲜市场

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1561086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KUKA机器人更改时间和HMI最小化设置

在使用 KUKA 机器人时&#xff0c;示教器上左边有个“表”的图标&#xff0c;点一下就会显示时间。但一般不准&#xff0c;想要更改时间可以通过HMI最小化后进行更改设置。更改时间需要将示教器界面最小化&#xff0c;也就是进入Windows 界面。通过以下步骤可以进行设置&#x…

ES学习日记(二)-------集群设置

上一节写了elasticsearch单节点安装和配置,现在说集群,简单地说就是在多台服务器上搭建单节点,在配置文件里面增加多个ip地址即可,过程同单节点部署,主要说集群配置 注意:不建议在之前单节点es上修改配置为集群,据说运行之后会生成很多文件,在单点基础上修改容易出现未知问题,…

微信支付平台与微信服务号关联配置要点

目录 JSAPI支付 前期资料及相关准备 申请微信服务号 服务号配置要点 微信认证 基本配置 功能设置 申请微信支付号 支付号配置要点 设置操作密码 API安全 开发设置 与服务号关联 小结 JSAPI支付 我们的开发应用场景以JSAPI支付为举例&#xff0c;这也是常用的一…

基于Java+SpringBoot+Mybaties+layui+Vue+elememt 实习管理系统 的设计与实现

一.项目介绍 前台功能&#xff1a;用户进入系统可以实现首页&#xff0c;系统公告&#xff0c;个人中心&#xff0c;后台管理等功能进行操作 后台由管理员&#xff0c;实习单位&#xff0c;教师和学生&#xff0c;主要功能包括首页&#xff0c;个人中心&#xff0c;班级管理&am…

Python多任务处理---多线程

引入 生活中&#xff0c;我们在电脑上打开了一个word, 这个word对操作系统来说就是一个进程。我们在进行word操作的时候&#xff0c;比如在你打字的时候&#xff0c;该word同时可以进行文字检查。发现了没&#xff0c;在同一个进程中&#xff0c;我们也可以进行同时操作。…

编程语言 MoonBit 本周有超多重磅更新等你来探索:expect 测试添加 inspect 函数,还有……

MoonBit 更新 1. expect 测试添加 inspect 函数 expect 测试添加针对 Show 接口的 inspect 函数&#xff0c;签名如下&#xff1a; pub fn inspect(obj: Show,~content: String "",~loc: SourceLoc _,~args_loc: ArgsLoc _ ) -> Result[Unit, String]⚠️ 此…

【javascript】Promise的介绍和使用方法

简言 什么是Promise&#xff1f; Promise 是一个对象&#xff0c;它代表了一个异步操作的最终完成或者失败。它可以进行链式调用、错误捕捉等操作&#xff0c;轻松解决经典的回调地狱问题&#xff0c;可以像编写同步代码那样&#xff0c;从容、简洁、优雅地实现高复杂度的异步…

【算法分析与设计】丑数 | |

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你一个整数 n &#xff0c;请你找出并返回第 n 个 丑数 。 丑数 就是质因子只包含 2、3 和 5 的正整数。 示例 示例 1&#xff1a;…

智慧城市数字孪生,综合治理一屏统览

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维&#xff0c;从构成城市诸多要素、结构、功能等方面入手&#xff0c;系统推进…

Python基础之Class类的定义、继承、多态

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、class类1.类属性操作&#xff08;增删改&#xff09;2.类方法操作 二、类的继承1、语法2、方法重写 二、类的多态 一、class类 、三部分组成 1、类名&#xff…

makefile第五讲

更多精彩内容在公众号。 书写命令 每条规则中的命令和操作系统 Shell 的命令行是一致的。 make 会按顺序一条一条的执行命令&#xff0c; 每条命令的开头必须以[Tab]键开头&#xff0c; 除非&#xff0c;命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被…

FreeRTOS系列补充1:重点记忆知识点

1、FreeRTOS的调度策略、内部原理 FreeRTOS采用抢占式优先级调度策略。任务根据其优先级进行调度&#xff0c;优先级高的任务会抢占优先级低的任务的执行权。FreeRTOS使用任务控制块&#xff08;Task Control Block&#xff0c;简称TCB&#xff09;来管理任务信息和状态。调度…

好展位、抢先订!2024第19届亚洲泳池SPA展览会|广州游池展

邀请函/2024第19届亚洲泳池SPA博览会 时间&#xff1a;2024年5月10日--12日 地点&#xff1a;广州中国进出口商品交易会展馆 主办单位&#xff1a;广东省沐浴休闲协会 广东省水处理技术协会 广东鸿威国际会展集团有限公司 支持单位:国际桑拿协会 韩国SPA协会 亚洲水疗康体促…

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算 数据的计算需要采用格式化的存储&#xff0c; 规则的数据结果&#xff0c;可以快速的按照指定要求存储数据 这里就不得不说二叉树了&#xff0c;二叉树应用场景真的很多 本题讲的是&#xff0c;验证二叉树的前序序列化 换言之&#xff0c;不采用建立树的…

monocle2 orderCells报错

问题&#xff1a;运行monocle2&#xff08;version2.26.0&#xff09;的orderCells出现以下错误 解决方式&#xff1a;出现错误后&#xff0c;运行以下命令&#xff1a; trace(project2MST, edit T, where asNamespace("monocle")) 然后&#xff0c;在弹出的窗口…

Meta Pixel:助你实现高效地Facebook广告追踪

Meta Pixel 像素代码是用來衡量Facebook广告效果的一个官方数据工具&#xff0c;只要商家有在Facebook上投放广告就需要串联Meta Pixel 像素代码来查看相关数据。 它本质上是一段 JavaScript 代码&#xff0c;安装后可以让用户在自己网站上查看到访客活动。它的工作原理是加载…

如何在CentOS7部署Wiki.js知识库并实现分享好友公网远程使用【内网穿透】

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上&#xff0c;我们都需要通过某种方式来有条理的组织相应的知识架构&#xff0c;那么一个好的知识整…

小黑逆向爬虫探索与成长之路:小黑独立破解毛毛租数据加密与解密

前言 有道和招标网的加密入口定位在前面两期做了详细的介绍&#xff0c;本小结将通过简单的关键词搜索定位到加密与解密入口 数据接口寻找与请求 根据响应数据长度&#xff0c;确定数据接口&#xff0c;发现传入的参数需要加密&#xff0c;响应的结果需要解密&#xff0c;后…

Python异常处理:基础到进阶的实用指南

前言 大家好&#xff0c;我是海鸽。异常处理在工程文件中必不可少&#xff0c;今天就带大家彻底搞定python的异常处理。 什么是异常 在Python中&#xff0c;异常是指在程序执行过程中出现的错误或异常情况。 当Python解释器无法执行代码时&#xff0c;它会引发异常&#xff0…

Excel 粘贴回筛选后的单元格不能完全粘老是少数据 ,有些单元格还是空的

环境&#xff1a; excel2021 Win10专业版 问题描述&#xff1a; excel 粘贴回筛选后的单元格不能完全粘老是少数据 有些单元格还是空的 复制选择筛选后A1-A10单元格 &#xff0c;定位条件&#xff09;&#xff08;仅可见单元格&#xff09;来访问&#xff0c;或者你可以使用…