springboot接收前端单个或多个对象

问题:

使用SpringBoot开发接口时,经常使用@RequestParam("parmName")注解来绑定单个前端传递过来的属性,当属性过多时怎么办,写一堆@RequestParam吗?显然不是;在没有使用SpringBoot开发之前我是从request中获取参数的Map对象,然后使用工具类将Map转化成Bean对象。但是还是有点麻烦,在使用SpringBoot后是否可以简单一点,答案是肯定的,这就要用到@RequestBody注解了;

看下面代码:

  • 后端代码
@RestController
public class UserController {
    
    @PostMapping("/register")
    public String register(@RequestBody User user){
        System.out.println(user);
        return "success";
    }

    @PostMapping("/register_01")
    public void register_01(@RequestBody List<User> user){
        System.out.println(user);
        return;
    }

    @PostMapping("/register_02")
    public void register_02(@RequestBody Map<String,String> user){
        System.out.println(user.get("name"));
        return;
    }
}
  • 前端代码
const aa = {name:"xiaoming",sex:"man",age:20,phone:"18899998888"};
    const bb = {name:"xiaoming",sex:"man",age:20,phone:"18899998888"};
    const cc = {name:"xiaoming",sex:"man",age:20,phone:"18899998888"};
    const tt = [aa,bb,cc];
    const test = JSON.stringify(tt);
    console.log(test);
    $.ajax({
        url: "/register",
        type: "post",
        async: false,
        dataType:"json",
        data:JSON.stringify(aa),
        contentType:"application/json;charset=utf-8",
        success: function (data) {
            console.log(data);
        }
    });
    $.ajax({
        url: "/register_02",
        type: "post",
        async: false,
        dataType:"json",
        data:JSON.stringify(aa),
        contentType:"application/json;charset=utf-8",
        success: function (data) {
            console.log(data);
        }
    });
  • 注意 1 :在使用@RequestBody绑定对象是不能使用Get方法请求,会报下面的错:
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

原因是使用get方法请求时数据会被放到url后面就像下面:

Request URL: http://localhost:8080/register_02?{%22name%22:%22xiaoming%22,%22sex%22:%22man%22,%22age%22:20,%22phone%22:%2218899998888%22}

当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。参考链接

  • 注意 2 : 前端向后端传递数据时需要注意两点

    1、需要设置contentType:“application/json;charset=utf-8”

    2、data参数发送的不能时json对象,如:{name:xiaoming,age:26,sex:man},需要使用JSON.Stringify(xx)将数据转化为json字符串;

上面的案例是在前后端没有分离时的的方法,如果时前后端分离需要传递对象参考:https://blog.csdn.net/weixin_43474695/article/details/104995443

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值