java response 调用js_java httpclient 请求的response为text/javascript,如何处理响应的js对象?...
最后做出来了,但是没有特别满意
package com.honey.js;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.script.ScriptException;
import org.apache.commons.io.FileUtils;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import com.google.common.base.Charsets;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class JavaScriptResponse {
private static final String regex = "(new\\s+Date\\([0-9,]+\\))";
private static final String df = "yyyy-MM-dd HH:mm:ss";
public static void main(String[] args) throws IOException, ScriptException {
String resp = FileUtils.readFileToString(new File("resp.js"), Charsets.UTF_8.toString());
System.out.println(resp);
//正则部分
Pattern p = Pattern.compile(regex);
System.out.println(p.pattern());
Matcher m = p.matcher(resp);
StringBuffer sb = new StringBuffer();
while(m.find()) {
Date date = convert(m.group(1));
String str = "'" + formatDate(date)+"'";
m.appendReplacement(sb, str);
}
m.appendTail(sb);
String ret = sb.toString();
System.out.println(ret);
Gson gson = new Gson();
Map myMap = gson.fromJson(ret, new TypeToken>(){}.getType());
System.out.println(myMap);
}
private static String formatDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat(df);
return sdf.format(date);
}
private static Date convert(String text) {
try {
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();
Object result = cx.evaluateString(scope, text, "", 1, null);
Date date = (Date) Context.jsToJava(result, Date.class);
return date;
} finally {
Context.exit();
}
}
}
一些maven依赖
org.apache.commons
commons-io
1.3.2
org.mozilla
rhino
1.7.7.1
com.google.code.gson
gson
2.8.1