@RequestBody神坑

 今天将前端请求由键值对改为json请求后,原来写的验证码模块怎么也验证不成功,很是郁梦啊,后来看日志才知道是通过@RequestBody绑过来的单个对象是json字符串,而不是我想要的直接的String值,难怪怎么就出错了呢,为了避免出错,以后还是通过改成map来绑定吧,不管是单个对象还是多个,map取值也很方便,是吧,特此记录下,值得一提的是,不管你用了多少个@RequestBody,它只会全部绑定在第一个参数中,切记

@PostMapping(value = "/test")
public void test(@RequestBody String username){
    System.out.println(username);
    String name = JSONObject.toJSONString(username);
    System.out.println(name);
}

@PostMapping("/test2")
public void test2(@RequestBody User user){
    System.out.println(user.getNickname());
    System.out.println(user.getEmail());
    System.out.println(user.getPassword());
}

User 对象有三个属性nickname,email,password,构造函数User(String nickname, String email,String password)

先来看看绑过来的username是个什么:

 控制台打印的username为:

 并不是我们期望的daniel,而是一个Json字符串,那么我们怎么取出username的值呢,目前想到的方法

1、改用Map<String,String> map绑定username,然后通过map.get("username")取值

2、使用com,alibaba.fastjson包将json字符串转换为Json 对象,在通过get方法取出username值

@PostMapping(value = "/test")
public void test(@RequestBody String username){
    System.out.println(username);//json字符串
    JSONObject object = JSON.parseObject(username); //解析成json对象
    String name = object.getString("username"); //通过get方法取值,根据不同的key有不同的get方法,比如getString(),getInteger(),getBytes()等等
    System.out.println(name);
}

再来看看User绑过来没有?

如果少一个属性呢 

如果添加一个对象中不存在的属性呢

 

 注意其中的age属性不存在于User对象中

 控制台不会报错,但是我们怎么取出这个没有的age属性呢?不知道,还是别这么做吧,额

想了解更多的看看这里那里吧。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值