支持 ? 后带参数,以及 post json数据。
post 与 get 参数重复。post会覆盖get
import com.alibaba.fastjson.JSONObject;
import com.jfinal.core.Action;
import com.jfinal.core.Controller;
import com.jfinal.core.paragetter.ParaGetter;
import javax.servlet.ServletInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
public class JSONObjectGetter extends ParaGetter<JSONObject> {
public JSONObjectGetter(String parameterName, String defaultValue) {
super(parameterName, defaultValue);
}
@Override
protected JSONObject to(String v) {
//System.out.println("to(String v)...");
return null;
}
@Override
public JSONObject get(Action action, Controller c) {
return getData(c);
}
private JSONObject getData(Controller c) {
JSONObject jobj = new JSONObject();
// ? 参数解析
getRequestData(c, jobj);
// post 参数解析
postRequestData(c, jobj);
return jobj;
}
private void postRequestData(Controller c, JSONObject jobj) {
try (ServletInputStream is = c.getRequest().getInputStream()) {
byte[] bytes = new byte[is.available()];
is.read(bytes);
String str = new String(bytes, "UTF-8");
JSONObject postParams = JSONObject.parseObject(str);
if (postParams != null) {
for (Map.Entry<String, Object> e : postParams.entrySet()) {
jobj.put(e.getKey(), e.getValue());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void getRequestData(Controller c, JSONObject jobj) {
Map<String, String[]> paraMap = c.getParaMap();
Iterator<Map.Entry<String, String[]>> entries = paraMap.entrySet().iterator();
Map.Entry entry;
String name = "";
String value = "";
while (entries.hasNext()) {
entry = entries.next();
name = (String) entry.getKey();
Object valueObj = entry.getValue();
if (null == valueObj) {
value = "";
} else if (valueObj instanceof String[]) {
String[] values = (String[]) valueObj;
for (int i = 0; i < values.length; i++) {
value = values[i] + ",";
}
value = value.substring(0, value.length() - 1);
} else {
value = valueObj.toString();
}
jobj.put(name, value);
}
}
}

调用示例:controller 中方法
