问题背景:
有一个保存和修改的需求
接口地址都是 /apps/info
,请求方式分别为POST 和 GET
定义了一个参数类
@Data
@Accessors(chain = true)
public class AppInfoReq {
@JsonProperty("is_disable")
private Boolean disabled;
@JsonProperty("app_name")
private String name;
}
接口定义如下:
@PostMapping("/apps/info")
public void save(@RequestBody AppInfoReq req){}
@GetMapping("/apps/info")
public List<AppInfo> searchApps(AppInfoReq req){
}
调用http请求
POST
/apps/info
{
"app_name": "aaaa",
"is_disable": false
}
保存成功,数据正常持久化到数据库。
接着调用
GET
/apps/info?is_disable=false
查询disabled字段为false的数据,却无法查询到结果,debug发现请求参数AppInfoReq.disabled 字段为空。
改用 GET
/apps/info?disabled=false
即可
原因分析
POST接口请求方式为application/json方式,@JsonProperty 序列化能够生效
GET请求方式,参数拼接在URL后面,此时参数对象中的 @JsonProperty 不会生效。