FLUIG平台调用接口时getResponseCode()方法致代码异常求助
问题原因及解决办法
核心问题分析
- 连接属性修改时机错误:
getResponseCode()方法会触发HTTP连接建立,一旦调用该方法,后续再修改连接核心属性(比如setDoOutput(true))会直接抛出异常,因为连接状态已不可更改。 - 重复定义变量:代码中两次用
var intResponseCodeGET声明同一变量,虽Rhino引擎允许,但会导致变量作用域混乱,增加调试难度。 - 冗余设置与重复调用:GET请求无需设置
Content-Type(GET通常无请求体);连续两次调用getResponseCode(),第一次调用后连接已处于活跃状态,第二次调用易引发流读取异常。
修正后的代码
var apiC = new java.net.URL(strUrl); var consumo = apiC.openConnection(); responseGET = strUrl; // 先完成所有连接配置,再触发连接 consumo.setConnectTimeout(180000); consumo.setReadTimeout(180000); consumo.setRequestMethod("GET"); consumo.setRequestProperty("Authorization", "Bearer " + Token); consumo.setRequestProperty("Accept", "application/json"); consumo.setRequestProperty("tenant", l); // GET请求无需setDoOutput(true),该配置仅用于POST/PUT等带请求体的方法 var intResponseCodeGET = consumo.getResponseCode().toString(); responseGET = intResponseCodeGET; // 用严格等于避免类型匹配问题 if( intResponseCodeGET === "200" || intResponseCodeGET === "201" ) { responseGET = "ok"; }
关键修复点说明
- 调整配置顺序:所有连接相关设置(超时、请求方法、请求头)必须在调用
getResponseCode()前完成,确保连接未触发时完成初始化。 - 移除冗余配置:删除GET请求下的
Content-Type设置和不必要的setDoOutput(true)。 - 避免重复操作:仅调用一次
getResponseCode(),直接转为字符串使用,避免重复触发连接状态变更。 - 规范变量声明:只声明一次
intResponseCodeGET,避免作用域冲突。 - 严格字符串比较:用
===替代==,确保类型与值完全匹配,避免隐式类型转换导致的判断错误。
内容的提问来源于stack exchange,提问作者Hector Franck
相关产品推荐
相关产品推荐

