You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rest Assured进行Rest API测试时参数为空问题求助

排查Rest Assured请求参数为null的问题

我来帮你排查下这个问题,你遇到的情况确实挺头疼——控制台打印的JSON看着没问题,但服务器那边全是null,大概率是序列化或者请求传递环节出了问题,咱们一步步来:

  • 检查ValidateCard类的序列化基础
    你用JSONObject手动序列化Java对象,这个过程依赖类的getter方法和字段命名:

    • 首先确认ValidateCard里的每个字段都有对应的getter(比如getCardNo()、getMobileNo()、getcCode()、getProgmType()),如果缺少getter,JSONObject可能无法正确读取字段值。
    • 其次检查字段名是否和服务器端期望的完全一致:比如你代码里的cCode和ProgmType,服务器是不是期望code或者progType?大小写、拼写差一点都会导致服务器无法识别参数。
  • 替换手动JSON序列化,用Rest Assured自动序列化
    Rest Assured本身支持直接传入Java对象并自动序列化为JSON,比手动转JSONObject更可靠,也能避免手动序列化的潜在问题。你可以把代码改成这样:

    public Response validatecardTest(String cardNo, Object mobileNo, String code, String progType) {
        ValidateCard validateCard = new ValidateCard();
        validateCard.setCardNo(cardNo);
        validateCard.setMobileNo(mobileNo);
        validateCard.setcCode(code);
        validateCard.setProgmType(progType);
    
        RequestSpecification requestSpecification = RestAssured.given()
            .contentType(ContentType.JSON) // 用Rest Assured自带的常量,避免拼写错误
            .accept(ContentType.JSON)
            .body(validateCard); // 直接传入Java对象,Rest Assured会自动序列化
    
        // 加上日志打印,确认实际发送的请求体
        requestSpecification.log().all();
        
        Response response = requestSpecification.post("http://ipaddress:port/request url");
        System.out.println(response);
        return response;
    }
    

    如果字段名和服务器期望的不一致,可以给ValidateCard的字段加上Jackson的@JsonProperty注解来映射,比如:

    public class ValidateCard {
        private String cardNo;
        private Object mobileNo;
        
        @JsonProperty("code") // 服务器期望的字段名是code
        private String cCode;
        
        @JsonProperty("progType") // 服务器期望的字段名是progType
        private String progType;
    
        // 对应的getter和setter
    }
    
  • 确认实际发送的请求体
    你之前只打印了自己生成的jsonObject,但实际发送给服务器的内容可能和这个不一样。加上requestSpecification.log().all()后,控制台会打印完整的请求信息,包括请求头、请求体,这样你就能看到真正传到服务器的JSON是什么样的,是不是真的包含了所有参数。

  • 检查mobileNo的类型问题
    你把mobileNo定义为Object类型,序列化的时候可能会有特殊处理,比如如果传null的话,JSONObject可能会忽略这个字段,而服务器可能期望这个字段必须存在(哪怕值是null)。如果是这种情况,可以把mobileNo改成具体类型(比如String),或者确保序列化时保留null字段。

内容的提问来源于stack exchange,提问作者Rajesh Om

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:58:08