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

SpringMVC注解、@Controller注解和@RestController注解的区别、@RequestMapper、@PathVariable

DAY28.1 Java核心基础

单体架构

SpringMVC注解

Spring MVC 提供了强大的注解机制,大大简化代码的开发,提升程序的可扩展性

@RequestMapper

通过该注解将URL与业务代码进行映射联系

同时也可以映射到控制器,相当于多一个访问路径

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping(value = "/test",params = "test")public String test(){return "test";}@RequestMapping(value = "/list",method = RequestMethod.GET)public List<User> list(){return userService.list();}}

访问路径:localhost:8080/user/test

参数

value:指定URL请求的路径,@RequestMapper的默认参数

@RequestMapping(“/test”) 等于 @RequestMapping(value=“/test”)

method:指定访问的请求方式,POST,GET…

@RequestMapping(value = "/test",method = RequestMethod.GET)

等于

@GetMapping("/test")

指定请求的方法为GET

image-20250526150713432

image-20250526150733772

可以看见get请求可以访问,但是post请求报错405

@RequestMapping(value=“/index”,method=RequestMethod.GET) = @GetMapping(“/index”)

@RequestMapping(value=“/index”,method=RequestMethod.PUT) = @PutMapping(“/index”)

@RequestMapping(value=“/index”,method=RequestMethod.DELETE) = @DeleteMapping(“/index”)

params:指定请求必须存在的参数,如果没有则无法访问

@RequestMapping(value = "/test",params = "name",method = RequestMethod.GET)

指定/user/test请求必须存在name参数,比如请求为http://localhost:8080/user/test?name=abc

常见的请求错误

  • 404:请求找不到,注意路径是否错误
  • 405:请求方式有问题,注意查看请求的指定方法比如GET、POST…
  • 400:参数不匹配,注意检查一下参数是否正确
  • 500:后台抛出异常,检查后端逻辑

传递参数

传统的传递参数

/user/test?name=…

@PathVariable

更多的使用RestFul的传参方式(路径传递参数)

RESTful:http://localhost:8080/user/list/abc/10

@RequestMapping(value = "/list/{name}/{id}")
@ResponseBody
public List<User> list(@PathVariable("name") String title,@PathVariable("id") Integer num){System.out.println(title);System.out.println(num);return this.userService.list();
}

用@PathVariable标注映射路径的参数

对象接受的参数
@PostMapping("/test2")
public User test2(User user){return user;
}

可以访问http://localhost:8080/user/test2?name=“张三”

只需要参数与实体类的字段匹配即可

@Controller注解和@RestController注解的区别

@Controller

  • 属于 Spring MVC 的标准注解,用于标识一个控制器类。
  • 默认返回的是视图(View)名称,一般用于服务端渲染 HTML 页面。
  • 如果需要返回 JSON 或 XML 数据,需在方法上添加 @ResponseBody 注解。

示例:

@Controller
public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello() {return "Hello, World!";}@RequestMapping("/page")public String page() {return "index"; // 返回视图名,会由视图解析器解析为 /WEB-INF/views/index.jsp}
}

@RestController

  • @Controller@ResponseBody 的组合注解,用于构建 RESTful API
  • 所有方法默认都以 JSON 或 XML 格式直接返回对象数据,而不是视图。
  • 常用于前后端分离的项目。

示例:

@RestController
public class ApiController {@RequestMapping("/api/hello")public String hello() {return "Hello, REST!";}@RequestMapping("/api/user")public User getUser() {return new User("张三", 18);}
}

Spring MVC 数据绑定

数据绑定:后台方法直接获取 HTTP 请求的参数

底层:HTTP 请求传输的参数都是String类型,业务方法中的参数都是指定的类型,所以需要类型转换,SpringMVC会自动转换

String 转换为需要的类型

基本数据类型

@GetMapping("byBaseType")
public String byBaseType(int id){return "id:"+id;
}

访问的时候如果没传递参数id,导致id为空则会报错

比如localhost:8080/user/byBaseType

image-20250527110211124

但是如果改为Integer包装类则不会报错

@GetMapping("byBaseType")
public String byBaseType(Integer id){return "id:"+id;
}

image-20250527110321550

因为基本数据类型不能为null

而包装类为引用类型可以为null

传递数组

@GetMapping("/arrayType")
public String arrayType(String[] names){StringBuilder sb = new StringBuilder();for (String name : names) {sb.append(name).append(",");}return sb.toString();
}

访问传递数组的参数:http://localhost:8080/user/arrayType?names=abc&names=bcd&names=shuwu

级联对象

@Data
public class Student {private Integer id;private String name;private Integer age;private Address address;
}
@Data
public class Address {private Integer id;private String city;
}
@GetMapping("/student")
public Student student(Student student){return student;
}

如何传递address字段呢,通过address.id=…来赋值

http://localhost:8080/user/student?id=1&name=shuwu&age=18&address.id=1&address.city=chongqing

http://www.xdnf.cn/news/9228.html

相关文章:

  • 制作一款打飞机游戏59:子弹生成
  • DeepSeek 赋能智能安防:从算法革新到场景落地的全解析
  • 4月报 | SeaTunnel支持TDengine的多表Sink功能
  • 机器学习算法-- K 近邻算法(KNN)
  • Linux 资源限制(进程级,用户级,系统级)
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?
  • Cursor 与DeepSeek的完美契合
  • 树莓派超全系列教程文档--(49)远程访问树莓派
  • 5.27 day 30
  • SQL计算列
  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • ElasticSearch整合SpringBoot
  • 《深入解析UART协议及其硬件实现》-- 第一篇:UART基础与协议层详解
  • 一张Billing项目的流程图
  • 16. Git从入门到实践
  • Java-Set集合遍历的全面指南
  • 贝壳后端golang面经
  • 【信号与系统】【转载记录】漫谈《信号与系统》
  • 体绘制学习
  • Android开机向导定制(2)开机向导配置