踩过的坑

2021-03-06   


1. 关于注解@RequestBody不能使用String类型接收参数的坑

在写一个逻辑: 发送验证码, 并存入redis时发现了一个@RequestBody注解的坑

前端发送的json字符串:

{
    "phone":"13700137001"
}

后端接收代码:

public void SendSmsCode(@RequestBody String phone){
		... ...
}

将手机号和验证码存入reids, 键为String phone, 此时String phone中存储的数据为整体的json数据:{"phone":"13700137001"}

这时从redis中用手机号phone作为键获取验证码时, 发现获取不到, 因为此时的phone只是一个单纯的手机号13700137001, 而redis中的键为{"phone":"13700137001"}.

所以在使用@RequestBody注解时, 如果用String接收参数时, 会将全部的参数内容都封装到String字符串中, 这样会导致一些问题. 所以还是用Map集合或者实体类来接收参数.

// 使用实体类接收参数
public void SendSmsCode(@RequestBody User user){
        String phone = user.getPhone();
}

// 使用Map集合接收参数
public void SendSmsCode(@RequestBody Map<String, String> map){
        String phone = map.get("phone");
}

Q.E.D.