Post请求中@RequestParam和@RequestBody的使用

使用

如何在一个@RestController方法中混合使用@RequestParam和@RequestBody呢?就像这样的代码:

@PostMapping("/scanRecord")
public Response scanRecord(@RequestParam("t") int type, @RequestBody ScanRecord scanRecord) {
    System.out.println("type="+type);
    System.out.println(JSON.toJSONString(scanRecord));
    return Response.ok();
}

核心概念:

@RequestBody用来接收http post请求的body,前端传入序列化好的json数据,后端可以解析为json对象(Content-Type需要指定为 application/json)。

@RequestParam用来接收请求url?后面的参数,或者Content-Type为multipart/form-data、application/x-www-form-urlencoded时的http body数据。

所以,如果想要在@RestController的一个方法中,同时接收@RequestParam和@RequestBody数据,前端应该这样用:

混用 @RequestBody, @RequestParam :
function post() {
// json 数据;RequestBody接收 
    var data = {
        id: 1000,
        pn:'华为手机'
    };
    // /?t=1  @RequestParam 接口
    axios.post('http://localhost:8080/api/scanRecord?t=1', data).then(function (res) {
        
    }).catch(function (error) {

    });
}
axios Post (application/json) 提交

function post() {
    var data = {
        id: 1000,
        pn:'华为手机'
    };
    axios.post('http://localhost:8080/api/scanRecord?t=1', data).then(function (res) {
        
    }).catch(function (error) {

    });
}


axios post提交multipart/form-data、application/x-www-form-urlencoded数据
//form-data方式
function post() {
    var data = new FormData();
    data.append("id", 1000);
    data.append("pn", '华为手机');
    axios.post('http://localhost:8080/api/scanRecord?t=1', data).then(function (res) {
    }).catch(function (error) {
    });
}

//x-www-form-urlencoded方式
function encodeData(data) {
    var args = [];
    for(var attr in data) {
        args.push(attr+"=" + data[attr]);
    }
    return encodeURI(args.join("&"));
}
function post() {
    var data = {
        id: 1000,
        pn:'华为手机'
    };
    axios.post('http://localhost:8080/api/scanRecord?t=1', encodeData(data)).then(function (res) {

    }).catch(function (error) {

    });
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值