【记一次参数传值了但报错未传值的问题解决历程】
问题描述:同一个接口,用测试类调可以成功,用postman调用一直报错少参数,后又尝试了用idea自带的http调用,同样报错参数未传值。
如图,传值了报错未传值。
Controller层及DTO写法如下图:
解决历程
1.用postman调用一直报错参数未传值,但用测试类调可以成功,怀疑是postman的问题。后又尝试了用idea自带的http调用,结果同样,故排除postman的问题。
接口入口处打了断点,但请求参数校验处就已经失败了,没进入到接口内部。
2.怀疑是因为入参通过注解@Valid + @NotBlank 做了非空校验,注解校验错误,传值校验成未传值了。故去掉@Valid再次请求接口
如图,很明显,打印的参数少了!所以怀疑是参数传丢了!怎么传丢呢,必然是http传输的过程中丢的,怀疑是参数名没解析。
3.更换参数名如下图,再试,成功。
特殊参数名未解析到,不愿更换参数名可通过加注解@JSONField或@JsonProperty强制映射。
@JSONField注解是阿里巴巴的fastjson框架中的注解,用于指定JSON字符串中的属性名和Java对象中的属性名之间的映射关系
@JsonProperty注解是Jackson框架中的注解,用法类似于@JSONField,也是指定JSON字符串中的属性名和Java对象中的属性名之间的映射关系
4.@JSONField注解
5.@JsonProperty注解
6.@JSONField和@JsonProperty注解的其他用法可参考
https://www.jb51.net/program/3223658h7.htm