接收前端参数的方式

前言

        作为一名后端java开发工程师,做过很多前后端分离的项目(前后端分离是指将前端和后端代码拆分成两个独立的代码库,这种方式使得前后端代码的开发、测试和部署变得更加灵活和独立。相比于传统的网站开发方式,前后端分离能够提高开发效率、加速响应速度、提高代码可维护性和可扩展性。)如何接收前端好兄弟传过来的参数呢,这是一个问题,我总结了一下几种方式,供大家学习参考,不足请指出


第一种方式:

        最基本的get请求传参方式,前端在网页设置好参数直接发送给后端,后端接口域名使用HttpServletRequest对象通过.getParameter方法就可以直接获得前端传来的参数

httpServletRequest对象对http请求进行了封装,我们使用这个对象就可以方便快捷的获取http中的信息。HttpServletRequest 对象代表客户端的请求,在里面就包含了所有的客服端信息,我们通过这个对象的方法便可以获取所有的客服端信息,包括请求头和请求体中的所有数据。

其他方法:

  • getRequestURL():得到请求的URI
  • getRequestURL():得到请求的URL
  • getHeader(String s):getHeader表示得到请求头,参数s表示想要获取请求头中的什么数据
  • getHeader("Host"):获取请求的主机
  • getHeader("Referer"):获取请求来自于哪里,一般用来做防盗链
  • getRemotetAddr():得到请求的ip
  • getParameter(String s):得到请求参数的值
  • getParameterValues(String s):得到请求参数的值,用于参数有多个值,返回一个数组

代码如下:

@Controller
@RequestMapping("user")
public class UserController {
    /**
     * 第一种方式:
     */
    @RequestMapping("/request1")
    @ResponseBody
    public String request1(HttpServletRequest request, HttpServletResponse response){
        String account = request.getParameter("account");
        System.out.println(account);
        String password = request.getParameter("password");
        System.out.println(password);
        return "第一种传参已接收";
    }

 

打印一下前端传到参数: 

 第二种方式:

        后端接口域的名字与参数名字相同,自动接收参数

代码如下:

/**
     * 第二种方式:
     */
    @RequestMapping("/request2")
    @ResponseBody
    public String request2(String account,String password){
        System.out.println(account);
        System.out.println(password);
        return "第二种传参已接收";
    }

打印参数: 

 第三种方式:

        域名与参数名不一致通过RequestParam将传入的参数赋值给accountA,如果不传参数defaultValue作用是设置默认值

  1. 语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

  2. value:参数名

  3. required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。

  4. defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

代码如下:

 /**
     * 第三种方式:
     */
    @RequestMapping("/request3")
    @ResponseBody
    //域名与参数名不一致通过RequestParam将传入的参数赋值给accountA,如果不传参数defaultValue作用是设置默认值
    public String request3(@RequestParam(value = "account",defaultValue = "666") String accountA, @RequestParam(value = "password",defaultValue = "777")String passwordD){
        System.out.println(accountA);
        System.out.println(passwordD);
        return "第三种传参已接收";
    }

 打印参数:

 第四种方式:

当参数类型比较多时,可以采用封装的形式接收参数

/**
     * 第四种方式:
     */
    @RequestMapping("/request4")
    @ResponseBody
    //当参数类型比较多时,可以采用封装的形式
    public String request4( UserPo user){
        System.out.println(user.toString());
        return "第四种传参已接收";
    }



@Data
public class UserPo {
    private String account;
    private String password;

    @Override
    public String toString() {
        return "UserPo{" +
                "account='" + account + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

 

 第五种方式:

采用Postman使用Post请求,对于post请求传入的JOSN类型的数据,需要用@RequestBody来接收参数

 /**
     * 第五种方式:
     */
    @RequestMapping("/request5")
    @ResponseBody
    public String request5(@RequestBody UserPo user){
        System.out.println(user.toString());
        return "第五种传参已接收";
    }

 post请求种none、form-data、x-www-form-urlencoded、raw、binary几种传参方式的区别是什么呢?

form-data: 

       就是http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来说明文件类型;content-disposition,用来说明字段的一些信息;

由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

x-www-form-urlencoded:

       就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23

raw

       可以上传任意格式的文本,可以上传text、json、xml、html等

binary

        相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

 第六种方式:

通过路径的形式传参,例如下面这个网页没有参数的名称而是一长串的数字

 代码如下:

/**
     * 第六种方式:
     */
    @RequestMapping("/request6/{id}")
    @ResponseBody
    public String request6(@PathVariable String id){
        System.out.println(id);
        return "第六种传参已接收";
    }

 打印参数:


总结:

个人见解,不足请补充,希望对你有帮助 !

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值