Spring MVC 中的常见注解的用法(中)

简介: Spring MVC 中的常见注解的用法

2. 获取参数


获取单个参数


学习 servlet 时获取参数的写法:


@RestController
@RequestMapping("/user")
public class UserController {
    //传统写法获取请求中的参数
    @RequestMapping("/getname") //这里不建议使用大小写, 可以用下划线来区分
    public String getName(HttpServletRequest request) {
        return "Name : " + request.getParameter("name");
    }
}


通过 url 传递参数:

e36a21e56f424062ae81de4c90dd7ab3.png


通过注解获取:


@RestController
@RequestMapping("/user")
public class UserController {
  //直接获取 url 中的参数
  //当该路由被触发后,执行到方法时
  //就会对 name 进行匹配,直接对 name 进行赋值
    @RequestMapping("/getname2")
    public String getName2(String name) {
        return "Name : " + name;
    }
}

a1653989e4e643f7a8734585831678f2.png


获取多个参数


其实获取多个参数和获取单个参数差不多:


@RestController
@RequestMapping("/user")
public class UserController {
  //在传参时,注意参数的命名与要获取的参数名一致
    @RequestMapping("/getname3")
    public String getName3(String name, Integer age) {
        return "Name : " + name + "age : " + age;
    }
}


不传参数就默认为 null

dd696c4ca4ac49ff9eda7a3dfc5eef44.png

5f38eca239ed156116b0f963b80b2ca2_04ae034d189044a58a354f5e7dbf8593.png

传递对象


顾名思义,就是将参数当做一个对象的部分属性来接收,在接收时我们新建一个 model 层,来存放所需要的对象:

36714085f9d9488b895034b10b13290e.png


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/add")
    public User add(User user) {
        return user;  //将得到的对象返回回去
    }
}


@Data 注解是个组合注解,它等于:@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

添加了它就不需要我们自己写 Getter 和 Setter 方法了,减少重复工作。


f358a14ba15f4487ac2c15e0d2931854.png

当后端进行接收数据时,就会将参数和 user 里的属性进行对比,发现属性名称与参数的 key 相同就会进行赋值。


当对象返回前端时,因为前端是用 json 来表示对象的,所以返回的对象就转化为 json 格式 :

3298eed355c05e1871760c6e1bbc196b_a2a0701bbcaf4c6182a46a4922e19384.png


表单传参


其实表单传参和 url 传参区别就是传递参数的位置不一样,对于后端来说都一样,我们可以用 Postman 来构造请求:

11f58f194277fbdde7918e1d26e62c35_fd53964c73b94eb2b543364351f2454d.png


后端参数重命名


有时候前端传递的 key 你觉得不合理,想改个顺眼的名字,就可以对传递过来的参数重命名,当然前端的参数是不变的。(注意: 对象不能重命名)


@RestController
@RequestMapping("/user")
public class UserController {
  //将前端参数 y 改为 name,并由 name 接收
    @RequestMapping("/name")
    public String name(@RequestParam("y") String name) {
        return name;
    }
}


025afa2b018c764eac0d19fe3a10fc09_9936b4d184c94a5291e4a254ffc26d2f.png

这里就有一个问题,如果我不传这个 y 就会报错:

83b16120127d9b414d478ae0f1a25788_255997db4708426998d387193a4baba9.png

在 @RequestParam 中,参数默认是必传的:


db4f782fe9c3e45ac6b851750d19443b_7367f31f06e64159a7593eb037878758.png

如果我们需求是参数非必传则可以进行如下修改:


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/name")
    public String name(@RequestParam(value = "y",required = false) String name) {
        return name;
    }
}


这样就不会报错了:

b5f9d7f322064bcd32eb2dbc8e8a2dfb_9ce0327b249a4211a5614d4f827e85b2.png


@RequestBody 接收 JSON 对象


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/get_json")
    public User getJson(@RequestBody User user) {
        return user;
    }
}


使用 Postman 构造对象并发送 :


daec77211d6c143b408dbec1bef95b9a_905ea76c8b9f4469a0ad9c868c234dd2.png


@PathVariable 获取 URL 中的参数


@RestController
@RequestMapping("/user")
public class UserController {
  //{aid} 中的 aid 是用来接收参数的
    @RequestMapping("/get_url/{aid}")
    //下面的 "aid" 是将参数名为 aid 的参数赋值给后面的 aid
    //这里两个 aid 名字相同,可以省略参数名("aid")不写
    public Integer getUrl(@PathVariable("aid") Integer aid) {
        return aid;
    }
}


9c4ca0d33f2d421e6562f3d435e8eec2_69c6d8196e1d420c8147231073191cb3.png


当然了, 还可以传递多个参数 :


@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/get_url2/{aid}/{name}")
    public String getUrl2(@PathVariable() Integer aid, @PathVariable String name) {
        return "aid: " + aid + " name: " + name;
    }
}

2d3791ab974f5c265a64f7d6a900846a_1103055be3954696ab44072573fa5a73.png


相关文章
|
9天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
136 73
|
4天前
|
Java Spring 容器
【SpringFramework】Spring IoC-基于注解的实现
本文主要记录基于Spring注解实现IoC容器和DI相关知识。
36 21
|
9天前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
|
9天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
17天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
29 4
|
2月前
|
前端开发 Java Spring
Spring MVC核心:深入理解@RequestMapping注解
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的核心,它将HTTP请求映射到控制器的处理方法上。本文将深入探讨`@RequestMapping`注解的各个方面,包括其注解的使用方法、如何与Spring MVC的其他组件协同工作,以及在实际开发中的应用案例。
47 4
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
138 2
|
2月前
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
58 2
|
2月前
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
40 2
|
2月前
|
JSON Java 数据格式
springboot常用注解
@RestController :修饰类,该控制器会返回Json数据 @RequestMapping(“/path”) :修饰类,该控制器的请求路径 @Autowired : 修饰属性,按照类型进行依赖注入 @PathVariable : 修饰参数,将路径值映射到参数上 @ResponseBody :修饰方法,该方法会返回Json数据 @RequestBody(需要使用Post提交方式) :修饰参数,将Json数据封装到对应参数中 @Controller@Service@Compont: 将类注册到ioc容器