SpringBoot 控制器注解

 

@RequestBody、@RequestParam和@PathVariable的区别

@RequestParam 和 @PathVariable 一样,都是用于从request请求中绑定参数的,区别在于:

1. @RequsetParam是用于接收URL的查询串中的相应参数及请求体中的参数;

   @RequestParam有三个配置参数:

  • required 表示是否必须,默认为 true,必须。

  • defaultValue 可设置请求参数的默认值。

  • value 为接收url的参数名(相当于key值)。

@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。

@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。比如向表中插入单条数据,但是这样不支持批量插入数据啊,如果改用 json 字符串来传值的话,类型设置为 application/json,点击发送的话,会报错,后台接收不到值,为 null。

 

 

 

 

当请求头中的 Content-Type 类型为:multipart/form-data 或 application/x-www-form-urlencoded 时,该@RequestParam注解同样可以把请求体中相应的参数绑定到Controller方法的相应形参中

@Controller
@RequestMapping("receive")
public class receiveTest {
    @RequestMapping("/receiveFile")
    @ResponseBody
    public String receiveFile(@RequestParam(required = false, value = "file2") MultipartFile File2,
                              @RequestParam String FirstName, @RequestParam String LastName) {
        System.out.println("FirstName : " + FirstName);
        System.out.println("LastName : " + LastName);
        return "Success";
    }
}

 

@RequestParam 示例;接收请求行中URL后的查询串参数,当访问URL为 localhost:8080/page?pagenum=1&pageSize=5&ausername=a 时,将会把查询串中的参数按名绑定到page方法的相应形参上

 @GetMapping("/page")
    public  Map<String,Object> findPage(@RequestParam Integer pageNum, @RequestParam  Integer pageSize, @RequestParam String username){
         Map<String,Object> map=new HashMap<>();
         pageNum=(pageNum - 1) * pageSize;
        List<User> userList = userMapper.findPageSize(pageNum, pageSize,username);
        Integer total = userMapper.findTotal(username);
        map.put("data",userList);
        map.put("total",total);
        return map;

    }
    

 

 

@RequestParam 示例;接收请求行中URL后的查询串参数,当访问URL为 localhost:8080/page?pagenum=1&pageSize=5&ausername=a 时,将会把查询串中的参数按名绑定到page方法的相应形参上

 @GetMapping("/page")
    public  IPage<User> findPage(@RequestParam Integer pageNum, @RequestParam  Integer pageSize, @RequestParam(defaultValue = "") String username) {

        Page<User> userPage = new Page<>(pageNum,pageSize);

        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
       /* if(!"".equals(username)){
            userQueryWrapper.like("username",username);
        }*/
        if(!Util.isEmptyString(username)){
            userQueryWrapper.like("username",username);
        }
        //userQueryWrapper.orderByAsc("uid");//添加倒叙排列
        Page<User> page = userService.page(userPage,userQueryWrapper);
        return page;
    }

 

 

2. @PathVariable 是用于接收URL中占位符的参数

现有Controller如下,当访问URL为 localhost:8080/del/12时,将会把URL占位符的的参数按名绑定到del方法的相应形参上

 @DeleteMapping("/del/{uid}")
    public boolean del(@PathVariable String uid){
        return userService.removeById(uid);

    }

@RequestBody:

. @RequestBody是用于接收post请求中form表单中的数据;,请求后台方法,传递的参数是JSON时候,传入对象时候

现有Controller如下,当访问URL为 localhost:8080/save时,而且post的部分数据为user对象,或者表单数据

@PostMapping("/save")
public boolean save(@RequestBody User user){
user.setUid(UUID.randomUUID().toString());
user.setPassword("123456");
user.setCreatedUser(user.getUsername());
user.setModifiedUser(user.getUsername());
user.setCreatedTime(new Date());
return userService.save(user);
}

 

注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。

就application/json类型的数据而言,使用注解@RequestBody可以将body里面所有的json数据传到后端,后端再进行解析。

 

 

posted @ 2022-04-16 14:45  I若水  阅读(129)  评论(0编辑  收藏  举报