SpringBoot 使用@RequestBody 接收不到参数的问题
1、POST请求,payload中参数是有值的,但是后端接收不到,
后端仅接收到了
name,而NickName、Age、Job均为接收到参数


curl --location 'http://127.0.0.1/v1/testHub/example' \
--header 'Content-Type: application/json' \
--data '{
"name": "lisa",
"NickName":"nick-lisa",
"Age": 22,
"Job": "BA"
}'
原因1
后端没接收到的参数,均是请求中的参数都是首字母大写的CamelCase(大驼峰命名),而后端属性定义为camelCase(小驼峰命名),而后端又是使用的Lombok的@Data注解,自动生成的Setter和Getter,所以要求传参属性名大小写保持一致,必须一模一样
解决方案1.1
将传参的payload属性改为和后端接收bean属性保持一致

解决方案1.2
如果前端不是我们能控制的,
没办法要求别人改,我们在后端接收参数的位置可以变更
在属性上加上@JsonProperty注解
@Data
public class Person {
private String name;
@JsonProperty(value = "NickName")
private String nickName;
@JsonProperty(value = "Age")
private Integer age;
@JsonProperty(value = "Job")
private String job;
}
特别注意
如果我们后端接口接收参数时候没有写
@RequestBody注解,那么我们正常 以Content-Type=application/json的json格式参数,虽然不会报错,但后端是一个也收不到的

原因2:
2.1、请求内容 Content-Type=application/x-www-form-urlencoded
同样的接口请求,
负载格式变为了url拼接参数
导致无法请求
curl --location 'http://127.0.0.1/v1/testHub/example' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'name=lisa' \
--data-urlencode 'NickName=nick-lisa' \
--data-urlencode 'Age=22' \
--data-urlencode 'Job=BA'

2.2、请求内容 Content type=multipart/form-data
同样的接口请求,
负载格式变为了from表单
导致无法请求
curl --location 'http://127.0.0.1/v1/testHub/example' \
--form 'name="lisa"' \
--form 'NickName="nick-lisa"' \
--form 'Age="22"' \
--form 'Job="BA"'

解决方式2:
删除接口参数前的
@RequestBody注解即可

变更后

可以看到,请求正常


完结

浙公网安备 33010602011771号