jfinal controller 参数使用JSONObject实现

支持 ? 后带参数,以及 post   json数据。

post 与 get  参数重复。post会覆盖get

  1. import com.alibaba.fastjson.JSONObject;
  2. import com.jfinal.core.Action;
  3. import com.jfinal.core.Controller;
  4. import com.jfinal.core.paragetter.ParaGetter;
  5.  
  6. import javax.servlet.ServletInputStream;
  7. import java.io.IOException;
  8. import java.util.Iterator;
  9. import java.util.Map;
  10.  
  11. public class JSONObjectGetter extends ParaGetter<JSONObject> {
  12.  
  13.     public JSONObjectGetter(String parameterName, String defaultValue) {
  14.         super(parameterName, defaultValue);
  15.     }
  16.  
  17.     @Override
  18.     protected JSONObject to(String v) {
  19.         //System.out.println("to(String v)...");
  20.         return null;
  21.     }
  22.  
  23.     @Override
  24.     public JSONObject get(Action action, Controller c) {
  25.         return getData(c);
  26.     }
  27.  
  28.     private JSONObject getData(Controller c) {
  29.         JSONObject jobj = new JSONObject();
  30.         // ? 参数解析
  31.         getRequestData(c, jobj);
  32.         // post 参数解析
  33.         postRequestData(c, jobj);
  34.         return jobj;
  35.     }
  36.  
  37.     private void postRequestData(Controller c, JSONObject jobj) {
  38.         try (ServletInputStream is = c.getRequest().getInputStream()) {
  39.             byte[] bytes = new byte[is.available()];
  40.             is.read(bytes);
  41.             String str = new String(bytes, "UTF-8");
  42.             JSONObject postParams = JSONObject.parseObject(str);
  43.             if (postParams != null) {
  44.                 for (Map.Entry<String, Object> e : postParams.entrySet()) {
  45.                     jobj.put(e.getKey(), e.getValue());
  46.                 }
  47.             }
  48.         } catch (IOException e) {
  49.             e.printStackTrace();
  50.         }
  51.     }
  52.  
  53.     private void getRequestData(Controller c, JSONObject jobj) {
  54.         Map<String, String[]> paraMap = c.getParaMap();
  55.         Iterator<Map.Entry<String, String[]>> entries = paraMap.entrySet().iterator();
  56.         Map.Entry entry;
  57.         String name = "";
  58.         String value = "";
  59.         while (entries.hasNext()) {
  60.             entry = entries.next();
  61.             name = (String) entry.getKey();
  62.             Object valueObj = entry.getValue();
  63.             if (null == valueObj) {
  64.                 value = "";
  65.             } else if (valueObj instanceof String[]) {
  66.                 String[] values = (String[]) valueObj;
  67.                 for (int i = 0; i < values.length; i++) {
  68.                     value = values[i] + ",";
  69.                 }
  70.                 value = value.substring(0, value.length() - 1);
  71.             } else {
  72.                 value = valueObj.toString();
  73.             }
  74.             jobj.put(name, value);
  75.         }
  76.     }
  77. }

image.png

调用示例:controller 中方法

image.png


评论区

JFinal

2019-01-23 14:43

获得新技能,通过继承 ParaGetter 扩展 action 入参, 感谢分享

热门分享

扫码入社