首页 > 技术文章 > @RequestParam,@PathParam,@PathVariable,@QueryParam注解的使用区别

duniqb 2019-11-13 14:03 原文

 

注解所属框架

@RequestParam@PathVariable 注解是用于从 request 中接收请求的,两个都可以接收参数,关键点不同的是 @RequestParam 是从 request 里面拿取值,而 @PathVariable 是从一个URI模板里面来填充

所属平台获取url模板上数据的(/{id})@DefaultValue获取请求参数的(包括post表单提交)键值对(?param1=10&param2=20)、可以设置defaultValue
JAX-RS @PathParam @QueryParam
Spring @PathVariable @RequestParam

详细介绍

@RequestParam

在这里插入图片描述
前端传来的这种 url,可以使用以下方式获取

    @GetMapping("/api/private/v1/users")
    public JSONResult userList(@RequestParam(value = "query", required = false) String query,
                               @RequestParam(value = "pagenum") int pageNum,
                               @RequestParam(value = "pagesize") int pageSize) {
        UserListDTO result = userService.userList(query, pageNum, pageSize);
        return JSONResult.build(result, "查询成功", 200);
    }
@PathVariable

这是在解析 URL 里的变量,在 Mapping 中使用 {uId} 的方式获取
在这里插入图片描述

    @PutMapping("/api/private/v1/users/{uId}/state/{type}")
    public JSONResult userState(@PathVariable(value = "uId") Integer uId,
                                @PathVariable(value = "type") Boolean type) {
        int i = userService.userState(uId, type);
        if (i > 0) {
            SpManager spManager = userService.selectOneById(uId);
            ManagerDTO managerDTO = new ManagerDTO();
            BeanUtils.copyProperties(spManager, managerDTO);
            return JSONResult.build(managerDTO, "设置状态成功", 200);
        }
        return JSONResult.build(null, "设置状态失败", 400);
    }
@PathParam

等同于 Spring 的 @PathVariable 是一样的,也是基于模板的,但是这个是 jboss 包下面的一个实现,上面的是 Spring 的一个实现,都要导包

@QueryParam

与 Spring 的 @RequestParam 作用一致

@ResponseBody

表示从服务器返回数据的时候,是以 JSON 的形式返回的

@RequestBody

表示接收的是 JSON 数据,是一个 POST 请求

推荐阅读