zoukankan      html  css  js  c++  java
  • @RequestParam、@PathVariable、 @RequestBody用法

    Get和Post请求

    • get方式的请求是没有请求体的。但是get有query string parameter 。比如url?name=zhangsan
    • post请求发现了两种请求体。一种是FromData形式的请求体,一种是request payload形式的。这个可以F12查看network
      • post请求体是通过请求头中的Content-Type来区分的
      • formData形式的Content-Type为application/x-www-form-urlencoded*
      • request payload形式的请求体Content-Type为application/json或multipart/form-data

    @PathVariable

    定义URL变量规则(restful风格)

    @RequestMapping(value="/user/{username}")
    
    • 单个删除的时候,使用DELETE方式。例如 user/del/{id}。
    • 批量删除的时候,使用DELETE方式。例如user/dels/{ids}。
      • 这里的ids是用逗号分隔成的字符串后台用@PathVariable注解接收映射成List<String> ids形式的数据。

    @RequestParam

    • 【post】@RequestParam注解接收formData形式的请求体参数。

    • 【get】get有query string parameter 。比如url?id=2020

    @RequestMapping(value="/user")
    public String getUserBlog(@RequestParam(value="id") int blogId) {
        return "blogId="+blogId;
    }
    
    
    @RequestMapping("/allbook")
    @ResponseBody
    public Map<String, Object> listAll(@RequestParam(value = "bookName",required = false)String bookName){
        System.out.println(bookName);
        List<Books> list = bookService.selectBookByName(bookName);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("code", 0);
        map.put("msg", "");
        map.put("data", list);
        return map;
    }
    

    @RequestParam(value = "bookName",required = false)要求字段为空也可以,默认是非空

    @RequestBody

    • 【post】@RequestBody注解接收request payload形式的请求体参数,后台可以直接是map对象

    • @RequestBody主要用来接收前端传递给后端的json字符串(contentType:"application/json)。GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

    • 在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用。
      一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
      一般使用ajax提交数据给后台,后台接受到一个对象(对象需要有无参构造器和get/set),

    @RequestMapping("/stu/add")
        @ResponseBody
        public Map<String,Object> add(@RequestBody Student student){
            System.out.println("进入添加");
            Map<String,Object> map = new HashMap<String, Object>();
            student.setUUID(UUID.randomUUID().toString().replace("-",""));
            System.out.println(student);
            if(stuService.addStu(student)>0){
                map.put("status","1");
            }else{
                map.put("status","0");
            }
            return map;
        }
    

    如果没加contentType:"application/json",那么data就应该对应的是json对象;反之,如果加了contentType:"application/json",那么ajax发送的就必须是字符串。
    如果没加会报错415,415报错参考链接

    $.ajax({
       url:"/stu/add"
       ,type:"POST"
       ,contentType: 'application/json'
       ,data:JSON.stringify(data.field)
       ,success:function (data) {
      		...
      	}
    });
    

    小结

    【post】@RequestBody 传递一个对象

    【post|get】@RequestParam和【常用于delete】@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:

    • 通过@PathVariable,例如/blogs/1
    • 通过@RequestParam,例如blogs?blogId=1

    参考链接:

    https://www.cnblogs.com/oldwei/p/10158685.html

  • 相关阅读:
    Android 通过外键连接两个数据库
    WustOJ 1575 Gingers and Mints(快速幂 + dfs )
    Android数据库信息显示在listview上
    Android 开机启动通知
    JAVA车票管理系统(简单GUI)
    POJ1159 Palindrome(数位DP)
    python之Memcached 安装及操作
    Django中的缓存
    VUE 框架
    flask----flask-session
  • 原文地址:https://www.cnblogs.com/10134dz/p/13578694.html
Copyright © 2011-2022 走看看