Post接口参数中传递json,防止被转义

想要实现的效果:

content中参数是json类型:
在这里插入图片描述

使用JSONObject(失败):

org.json.JSONObject

   val jsonObj = JSONObject()
   jsonObj.put("policeNo", WorkBenchSP.policeNo)
   jsonObj.put("id", taskId)
   jsonObj.put("transmits", forwardInfo.value)
   jsonObj.put("policeNos", policeNoStr)


   val map = mutableMapOf<String, Any?>()
   map["user_id"] = WorkBenchSP.iDNo
   map["device_id"] = WorkBenchSP.deviceId
   map["content"] = jsonObj
   map["method"] = "doOaTodoTran"

情况1:直接使用jsonObj对象,多了一层key----> nameValueParis,呈现的效果如下:
在这里插入图片描述
情况2:使用jsonObj.toString(),参数传递时,json字符串会被转义:

 map["content"] = jsonObj.toString()

效果如下:
在这里插入图片描述

使用JsonObject(成功):

com.google.gson.JsonObject

    val jsonObj = JsonObject()
    jsonObj.addProperty("policeNo", "")
    jsonObj.addProperty("id", taskId)
    jsonObj.addProperty("transmits", forwardInfo.value)
    jsonObj.addProperty("policeNos", policeNoStr.toString())


    val map = mutableMapOf<String, Any?>()
    map["user_id"] = WorkBenchSP.iDNo
    map["device_id"] = WorkBenchSP.deviceId
    map["content"] = jsonObj
    map["method"] = "doOaTodoTran"
### 正则表达式在接口参数传递中的使用方法及注意事项 #### 使用方法 当涉及到上下游接口之间的正则表达式参数传递时,通常可以通过以下方式实现: 1. **通过HTTP请求头或Body传递** 如果上游接口需要向下游接口传递正则表达式作为参数,则可以将其嵌入到HTTP请求的头部字段或者JSON Body中。例如,在RESTful API设计中,可以在POST请求的JSON对象中加入一个键值对表示正则表达式[^1]。 ```json { "regexPattern": "^\\d{3}-\\d{2}-\\d{4}$" } ``` 这种方式适用于复杂的场景,尤其是当正则表达式的长度较长或结构复杂时。 2. **URL查询字符串形式** 对于简单的正则表达式,也可以采用GET请求并通过URL查询字符串的形式传递给下游接口。需要注意的是,由于URL编码的要求,某些特殊字符可能需要转义处理[^1]。 ``` http://example.com/api/validate?pattern=%5E%5Cd%7B3%7D-%5Cd%7B2%7D-%5Cd%7B4%7D$ ``` 上述例子展示了如何将正则表达式`^\d{3}-\d{2}-\d{4}$`安全地放入URL中。 3. **利用中间件或前置处理器** 前置处理器能够帮助动态生成或修改即将发送出去的请求内容。如果希望仅针对特定的一次调用设置正则表达式参数而不影响其他地方的行为,那么这种方法非常合适。 #### 注意事项 为了确保整个流程顺利运行以及数据准确性,应该注意以下几个方面: - **作用范围界定清晰** 如前所述,正则表达式用户参数的作用域有限制,它仅仅对于紧接着的那个HTTP请求有效。假如期望在整个测试计划里都能访问某个固定的模式串,则推荐改用“正则表达式提取器”,再结合变量机制来完成共享需求。 - **调试验证手段** 开发过程中难免会遇到错误配置的情况,因此建议启用专门的日志记录功能或者是像“查看结果树”这样的监听工具去观察实际发生的交互细节,进而确认所指定的正则表达式确实按照预期工作。 - **安全性考量** 接收来自外部输入源(比如客户端提交的数据)里的正则表达式存在潜在风险,特别是可能导致拒绝服务攻击(ReDoS)等问题。所以务必实施严格的校验逻辑以防范恶意构造的内容侵扰系统稳定性[^2]。 ```java // Java示例:基于Predicate<T>接口创建用于过滤字符串列表的方法 import java.util.*; import java.util.function.Predicate; public class RegexFilterExample { public static void main(String[] args){ List<String> strings = Arrays.asList("abc", "defg", "hijkl"); String regex = "^a.*"; // 可由API接收的实际正则表达式替换此硬编码部分 Predicate<String> startsWithA = s -> s.matches(regex); long count = strings.stream().filter(startsWithA).count(); System.out.println(count); // 输出符合条件的数量 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值