利用GenericTokenParser這個mybatis類實現動態拼接

GenericTokenParser的parse方法

public String parse(String text) {
    StringBuilder builder = new StringBuilder();
    if (text != null && text.length() > 0) {
      char[] src = text.toCharArray();
      int offset = 0;
      // 循環遍歷{"mobile":"${encryptMobile}","inTimeStamp":"${inTimeStamp}"}
	  // 判斷是不是有"${" 這個字符串 如果沒有start=-1 則跳過循環
      for(int start = text.indexOf(this.openToken, offset); start > -1; start = text.indexOf(this.openToken, offset)) {
        if (start > 0 && src[start - 1] == '\\') {
          builder.append(src, offset, start - offset - 1).append(this.openToken);
          offset = start + this.openToken.length();
        } else {
          int end = text.indexOf(this.closeToken, start);
          if (end == -1) {
            builder.append(src, offset, src.length - offset);
            offset = src.length;
          } else {
            builder.append(src, offset, start - offset);
            offset = start + this.openToken.length();
            String content = new String(src, offset, end - offset);
			// 調用handleToken動態添加內容
            builder.append(this.handler.handleToken(content));
            offset = end + this.closeToken.length();
          }
        }
      }

      if (offset < src.length) {
        builder.append(src, offset, src.length - offset);
      }
    }
    return builder.toString();
 }

實現動態拼接參數JSONString,首先創建一個解析參數的類

public class MapVariablesParser {

  public static String parse(String string, Map<String,Object> variables) {
    MapVariableTokenHandler handler = new MapVariableTokenHandler(variables);
    GenericTokenParser parser = new GenericTokenParser("${", "}", handler);
    return parser.parse(string);
  }

  private static class MapVariableTokenHandler implements TokenHandler {
    private Map<String,Object> variables;

    public MapVariableTokenHandler(Map<String,Object> variables) {
      this.variables = variables;
    }
    @Override
    public String handleToken(String content) {
      if (variables != null && variables.containsKey(content)) {
        return variables.get(content).toString();
      }
      return "${" + content + "}";
    }
  }
}

示例

public static void main(String[] args) {
    String params = "{\"user_id\":\"${userId}\",\"endTime\":\"${inTimeStamp}\",\"startTime\":\"${startTimeStamp}\",\"token\":\"user_agent_message\",\"limit\":\"10\",\"tags\":\"\"}";
    long now = System.currentTimeMillis();
    Map<String, Object> variables = Maps.newHashMap();
    variables.put("userId", "007");
    variables.put("channel", "weibo");
    variables.put("query_source", "dw_agg_user_agent_message");
    variables.put("startTimeStamp",now);
    long end = System.currentTimeMillis();
    variables.put("inTimeStamp",end);
    String parse = MapVariablesParser.parse(params, variables);
    System.out.println(JSONObject.toJSONString(parse));
  }

運行結果:

"{\"user_id\":\"007\",\"endTime\":\"1588926061438\",\"startTime\":\"1588926061419\",\"token\":\"user_agent_message\",\"limit\":\"10\",\"tags\":\"\"}"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章