Java SMS类请求体被text键包裹的原因及WSO2 EI修复方案
请求体被"text"键包裹的原因及修复方案
原因分析
- 你的Java SMS类发送请求时,未正确将Java对象序列化为JSON请求体,反而把生成的JSON字符串当作普通文本,被封装成了带"text"键的外层JSON结构。常见诱因:
- 序列化逻辑错误:先把目标对象转为JSON字符串,再通过HTTP客户端工具将这个字符串作为"text"字段的值二次序列化。
- 请求头配置错误:HTTP请求的
Content-Type未设置为application/json,误设为text/plain,触发部分框架或网关的默认包装行为,将请求体套入"text"键中。
修复方案
- 修正序列化逻辑:直接将
RequestData对应的Java对象序列化为JSON字节流,避免二次封装。例如用Jackson时:ObjectMapper objectMapper = new ObjectMapper(); RequestData requestData = new RequestData(); // 填充requestData的属性值 String jsonBody = objectMapper.writeValueAsString(requestData); // 将jsonBody直接作为请求体发送 - 配置正确的请求头:确保HTTP请求的
Content-Type设为application/json。以Apache HttpClient为例:HttpPost postRequest = new HttpPost("你的WSO2 EI API地址"); postRequest.setHeader("Content-Type", "application/json"); StringEntity requestEntity = new StringEntity(jsonBody, ContentType.APPLICATION_JSON); postRequest.setEntity(requestEntity); - 检查WSO2 EI侧配置:若确认客户端发送的是标准JSON,排查API的中介规则,是否存在强制转换请求格式的配置(比如
<property name="messageType" value="text/plain"/>),这类配置会导致网关自动将请求体封装为text字段,需调整为application/json。
内容的提问来源于stack exchange,提问作者Kavishka Rajapakshe
相关产品推荐
相关产品推荐

