Java调用ColdFusion 2016 REST API遇ParseException错误求助
Fixing "java.text.ParseException: Expected separator '/' instead of ';'" When Calling ColdFusion 2016 REST API from Java
我之前碰到过一模一样的问题,这个错误根源是ColdFusion 2016的REST解析器对HTTP请求头的格式要求比较严格——默认情况下,Java的HttpURLConnection会自动给请求添加带分号的Accept头(比如text/html;charset=utf-8),而ColdFusion的解析逻辑没法正确处理这种带额外参数的头格式,就会抛出这个分隔符异常。
解决方案:显式设置合规的请求头
你只需要在Java代码里手动设置Accept和(可选)Content-Type头,去掉多余的分号参数,让ColdFusion能正确解析。具体修改如下:
在你的Java代码中,调用con.setRequestMethod("GET");之后,添加这两行:
// 显式设置Accept头为ColdFusion能处理的格式 con.setRequestProperty("Accept", "text/plain"); // GET请求通常不需要Content-Type,但加上能避免潜在的解析问题 con.setRequestProperty("Content-Type", "text/plain");
修改后的完整Java代码
package javaapplication2; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; public class JavaApplication2 { public static void main(String[] args) throws Exception { TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HostnameVerifier allHostsValid = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); String url = "http://localhost:8501/rest/api/test"; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); // 添加这两行请求头设置 con.setRequestProperty("Accept", "text/plain"); con.setRequestProperty("Content-Type", "text/plain"); int responseCode = con.getResponseCode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); //print result System.out.println(response.toString()); } }
额外排查点
- 确认你的ColdFusion REST服务已经正确注册:在ColdFusion Administrator里,检查REST Services面板,确保你的API路径
/rest/api已经正确映射到对应的CF组件。 - 如果你后续需要返回JSON格式,只需要把
Accept头改成application/json,同时调整ColdFusion函数的returntype为struct或者json即可。
内容的提问来源于stack exchange,提问作者toni
相关产品推荐
相关产品推荐

