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

Java如何原样存储含冒号的字符串?用于Rest Assured Post请求

解决CSV读取JSON字符串及Rest Assured参数提取问题

我之前也碰到过类似的CSV读取特殊字符的坑,给你几个实用的解决方案:

首先解决冒号导致存储异常的核心问题:

  • 问题本质大概率是CSV读取工具默认把逗号当成分隔符,但如果你的JSON字段没被双引号包裹,读取时可能被误拆分(哪怕是冒号,某些简陋的读取逻辑也可能出问题)。所以一定要用专业的CSV解析库来处理:
    • 比如用OpenCSV或者Apache Commons CSV,它们会自动识别被双引号包裹的完整字段,不管里面有冒号、逗号这些特殊字符。举个OpenCSV的示例:
      CSVReader reader = new CSVReader(new FileReader("your-data.csv"));
      String[] row;
      while ((row = reader.readNext()) != null) {
          // row[对应列索引] 就是完整的JSON字符串,不会被拆分
          String jsonStr = row[0];
          // 接下来处理这个字符串即可
      }
      
    • 如果是手动构造测试字符串,记得转义双引号,比如:
      String jsonStr = "{ \"CompanyName\" : \"TestCompanyWithAllParams\",\"CommercialId\":\"AB1C\" }";
      
    • 要是用Java 15+,还可以用文本块,完全不用转义:
      String jsonStr = """
          { "CompanyName" : "TestCompanyWithAllParams","CommercialId":"AB1C" }
          """;
      

接下来是提取参数并用于Rest Assured Post请求的几种方式:

方法1:用Jackson解析到实体类(规范写法)

适合参数较多、需要复用的场景:

  1. 先定义对应实体类:
    public class Company {
        private String CompanyName;
        private String CommercialId;
        
        // 生成无参构造、getter和setter方法
        public String getCompanyName() { return CompanyName; }
        public void setCompanyName(String companyName) { CompanyName = companyName; }
        public String getCommercialId() { return CommercialId; }
        public void setCommercialId(String commercialId) { CommercialId = commercialId; }
    }
    
  2. 解析字符串并构造请求:
    ObjectMapper objectMapper = new ObjectMapper();
    Company company = objectMapper.readValue(jsonStr, Company.class);
    
    // 发送Rest Assured请求
    given()
        .contentType(ContentType.JSON)
        .body("{\"CompanyName\":\"" + company.getCompanyName() + "\", \"CommercialId\":\"" + company.getCommercialId() + "\"}")
        .when()
        .post("your-api-endpoint-url")
        .then()
        .statusCode(200);
    

方法2:用Rest Assured自带JSONPath直接提取(快捷写法)

不想写实体类的话,直接用JSONPath提取参数:

// 将字符串转为JsonPath对象
JsonPath jsonPath = new JsonPath(jsonStr);

// 提取所需参数
String companyName = jsonPath.getString("CompanyName");
String commercialId = jsonPath.getString("CommercialId");

// 构造并发送请求
given()
    .contentType(ContentType.JSON)
    .body("{\"CompanyName\":\"" + companyName + "\", \"CommercialId\":\"" + commercialId + "\"}")
    .when()
    .post("your-api-endpoint-url")
    .then()
    .statusCode(200);

方法3:直接复用完整JSON作为请求体(最简写法)

如果你的Post请求正好需要这个完整的JSON结构,那甚至不用提取参数,直接用读取到的字符串:

given()
    .contentType(ContentType.JSON)
    .body(jsonStr) // 直接传入从CSV拿到的完整JSON字符串
    .when()
    .post("your-api-endpoint-url")
    .then()
    .statusCode(200);

内容的提问来源于stack exchange,提问作者Mahesh Patil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:34