sbringboot常用注解和参数传递总结

目录

@Controller

@RequestMapping

@ResponseBody

@RequestParam

五种类型参数传递

JSON数据传输参数

@EnableWebMvc

@RequestBody

@RequestBody与@RequestParam区别

@DateTimeFormat

@PathVariable

总结关于接收参数的三个注解:

@RestController

@GetMapping @PostMapping @PutMapping @DeleteMapping

@Component@Controller@Repository@Service

@Resource@AutoWired

@Data 注解

 


@Controller

名称@Controller
类型类注解
位置SpringMVC控制器类定义上方
作用设定SpringMVC的核心控制器bean

@RequestMapping

名称@RequestMapping
类型类注解或方法注解
位置SpringMVC控制器类或方法定义上方
作用设置当前控制器方法请求访问路径
相关属性value(默认),请求访问路径
 @Controller
 public class UserController {
     @RequestMapping("/save")
     @ResponseBody
     public String save(){
         System.out.println("user save ...");
         return "{'info':'springmvc'}";
     }
 }
 ​

@RequestMapping("/save")注解建立了 /save 和 save方法的对应关系

@ResponseBody

名称@ResponseBody
类型类注解或方法注解
位置SpringMVC控制器类或方法定义上方
作用设置当前控制器方法响应内容为当前返回值,无需解析
 @Controller
 public class UserController {
     @RequestMapping("/save")
     @ResponseBody
     public String save(){
         System.out.println("user save ...");
         return "{'info':'springmvc'}";
     }
 }
 ​

如果不加@ResponseBody注解,直接返回字符串,springmvc会把字符串当成页面的名称在项目中进行查找返回,因为没有对应返回值的页面,所以会报404。加上@ResponseBody注解,当前返回值不会被解析,会直接被返回进行显示。

当方法上有@ReponseBody注解后

  • 方法的返回值为字符串,会将其作为文本内容直接响应给前端

  • 方法的返回值为对象,会将对象转换成JSON响应给前端

    响应json数据:

     @Controller
     public class UserController {   
         @RequestMapping("/toJsonPOJO")
         @ResponseBody
         public User toJsonPOJO(){
             System.out.println("返回json对象数据");
             User user = new User();
             user.setName("itcast");
             user.setAge(15);
             return user;
         }  
     }

    返回值为实体类对象,设置返回值为实体类类型,即可实 现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

@RequestParam

名称@RequestParam
类型形参注解
位置SpringMVC控制器方法形参定义前面
作用绑定请求参数与处理器方法形参间的关系
相关参数required:是否为必传参数 defaultValue:参数默认值

前端给的是name,后台接收使用的是userName,两个名称对不上,此时需要@RequestParam注解,将参数对应

 @RequestMapping("/commonParamDifferentName")
 @ResponseBody
 public String commonParamDifferentName(@RequestParam("name") String userName , int age){
     System.out.println("普通参数传递 userName ==> "+userName);
     System.out.println("普通参数传递 age ==> "+age);
     return "{'module':'common param different name'}";
 }

五种类型参数传递

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

  • POJO类型参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

  • 嵌套POJO类型参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

  • 数组类型参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数

  • 集合类型参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据

 //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
 @RequestMapping("/listParam")
 @ResponseBody
 public String listParam(@RequestParam List<String> likes){
     System.out.println("集合参数传递 likes ==> "+ likes);
     return "{'module':'list param'}";
 }

JSON数据传输参数

常见的JSON数据类型有三种:

  • json普通数组(["value1","value2","value3",...])

     //使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
     @RequestMapping("/listParamForJson")
     @ResponseBody
     public String listParamForJson(@RequestBody List<String> likes){
         System.out.println("list common(json)参数传递 list ==> "+likes);
         return "{'module':'list common for json param'}";
     }
  • json对象({key1:value1,key2:value2,...})

     @RequestMapping("/pojoParamForJson")
     @ResponseBody
     public String pojoParamForJson(@RequestBody User user){
         System.out.println("pojo(json)参数传递 user ==> "+user);
         return "{'module':'pojo for json param'}";
     }
  • json对象数组([{key1:value1,...},{key2:value2,...}])

 @RequestMapping("/listPojoParamForJson")
 @ResponseBody
 public String listPojoParamForJson(@RequestBody List<User> list){
     System.out.println("list pojo(json)参数传递 list ==> "+list);
     return "{'module':'list pojo for json param'}";
 }

@EnableWebMvc

名称@EnableWebMvc
类型配置类注解
位置SpringMVC配置类定义上方
作用开启SpringMVC多项辅助功能

@RequestBody

名称@RequestBody
类型形参注解
位置SpringMVC控制器方法形参定义前面
作用将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

@RequestBody与@RequestParam区别

  • 区别

    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】

    • @RequestBody用于接收json数据【application/json】

  • 应用

    • 后期开发中,发送json格式数据为主,@RequestBody应用较广

    • 如果发送非json格式数据,选用@RequestParam接收请求参数

@DateTimeFormat

名称@DateTimeFormat
类型形参注解
位置SpringMVC控制器方法形参前面
作用设定日期时间型数据格式
相关属性pattern:指定日期时间格式字符串
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
                        @DateTimeFormat(pattern="yyyy-MM-dd") Date date1)
    System.out.println("参数传递 date ==> "+date);
	System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
    return "{'module':'data param'}";
}

@PathVariable

名称@PathVariable
类型形参注解
位置SpringMVC控制器方法形参定义前面
作用绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应

@PathVariable注解将路径/users/{id}中的{id}传递到参数里面的id。若参数名称是userId和路径里面传过来的参数不一致,那么需要将注解修改为@PathVariable("id") Integer id

@Controller
public class UserController {
    //设置当前请求方法为DELETE,表示REST风格中的删除操作
	@RequestMapping(value = "/users/{id}",method = RequestMethod.DELETE)
    @ResponseBody
    public String delete(@PathVariable Integer id) {
        System.out.println("user delete..." + id);
        return "{'module':'user delete'}";
    }
}

总结关于接收参数的三个注解:

关于接收参数的三个注解@RequestBody@RequestParam@PathVariable,这三个注解之间的区别和应用分别是什么?

  • 区别

    • @RequestParam用于接收url地址传参或表单传参

    • @RequestBody用于接收json数据

    • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数

  • 应用

    • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广

    • 如果发送非json格式数据,选用@RequestParam接收请求参数

    • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

@RestController

名称@RestController
类型类注解
位置基于SpringMVC的RESTful开发控制器类定义上方
作用设置当前控制器类为RESTful风格, 等同于@Controller与@ResponseBody两个注解组合功能

@GetMapping @PostMapping @PutMapping @DeleteMapping

名称@GetMapping @PostMapping @PutMapping @DeleteMapping
类型方法注解
位置基于SpringMVC的RESTful开发控制器方法定义上方
作用设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作, 例如@GetMapping对应GET请求
相关属性value(默认):请求访问路径

@Component@Controller@Repository@Service

@Component是基础注解,表示一个 JavaBean 可以被注入到 Spring 容器中。

@Controller 用在表现层,对来自前端的请求进行转发处理与重定向。

@Repository 用在持久层,标注 DAO 类,表示这个类可以对数据库进行数据的读取或者写入。

@Service 用在业务层,用来处理业务逻辑。

@Resource@AutoWired

@Resource有两个属性是比较重要的,分别是name和type,默认按byName进行注入

@AutoWired是spring的注解,默认的注入方式为byType(根据类型进行匹配)

@Data 注解

@Data 注解的主要作用是提高代码的简洁,使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普朗克.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值