/*Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved. This source code is licensed under the Apache License Version 2.0.*/ package apijson; import java.util.ArrayList; import java.util.List; import java.util.Map; /**wrapper for request * @author Lemon * @see #puts * @see #toArray * @use JSONRequest request = new JSONRequest(...); *
request.puts(...);//not a must *
request.toArray(...);//not a must */ public class JSONRequest extends JSONObject { private static final long serialVersionUID = 1L; public JSONRequest() { super(); } /** * @param object must be annotated by {@link MethodAccess} * @see {@link #JSONRequest(String, Object)} */ public JSONRequest(Object object) { this(null, object); } /** * @param name * @param object * @see {@link #puts(String, Object)} */ public JSONRequest(String name, Object object) { this(); puts(name, object); } public static final String KEY_TAG = "tag";//只在最外层,最外层用JSONRequest public static final String KEY_VERSION = "version";//只在最外层,最外层用JSONRequest public static final String KEY_FORMAT = "format";//只在最外层,最外层用JSONRequest /**set "tag":tag in outermost layer * for write operations * @param tag * @return */ public JSONRequest setTag(String tag) { return puts(KEY_TAG, tag); } /**set "version":version in outermost layer * for target version of request * @param version * @return */ public JSONRequest setVersion(Integer version) { return puts(KEY_VERSION, version); } /**set "format":format in outermost layer * for format APIJSON special keys to normal keys of response * @param format * @return */ public JSONRequest setFormat(Boolean format) { return puts(KEY_FORMAT, format); } //array object <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< public static final int QUERY_TABLE = 0; public static final int QUERY_TOTAL = 1; public static final int QUERY_ALL = 2; public static final String QUERY_TABLE_STRING = "TABLE"; public static final String QUERY_TOTAL_STRING = "TOTAL"; public static final String QUERY_ALL_STRING = "ALL"; public static final String SUBQUERY_RANGE_ALL = "ALL"; public static final String SUBQUERY_RANGE_ANY = "ANY"; public static final String KEY_QUERY = "query"; public static final String KEY_COUNT = "count"; public static final String KEY_PAGE = "page"; public static final String KEY_JOIN = "join"; public static final String KEY_SUBQUERY_RANGE = "range"; public static final String KEY_SUBQUERY_FROM = "from"; public static final List ARRAY_KEY_LIST; static { ARRAY_KEY_LIST = new ArrayList(); ARRAY_KEY_LIST.add(KEY_QUERY); ARRAY_KEY_LIST.add(KEY_COUNT); ARRAY_KEY_LIST.add(KEY_PAGE); ARRAY_KEY_LIST.add(KEY_JOIN); ARRAY_KEY_LIST.add(KEY_SUBQUERY_RANGE); ARRAY_KEY_LIST.add(KEY_SUBQUERY_FROM); } /**set what to query in Array layer * @param query what need to query, Table,total,ALL? * @return * @see {@link #QUERY_TABLE} * @see {@link #QUERY_TOTAL} * @see {@link #QUERY_ALL} */ public JSONRequest setQuery(int query) { return puts(KEY_QUERY, query); } /**set maximum count of Tables to query in Array layer * @param count <= 0 || >= max ? max : count * @return */ public JSONRequest setCount(int count) { return puts(KEY_COUNT, count); } /**set page of Tables to query in Array layer * @param page <= 0 ? 0 : page * @return */ public JSONRequest setPage(int page) { return puts(KEY_PAGE, page); } /**set joins of Main Table and it's Vice Tables in Array layer * @param joins "@/User/id@", "&/User/id@,>/Comment/momentId@" ... * @return */ public JSONRequest setJoin(String... joins) { return puts(KEY_JOIN, StringUtil.getString(joins)); } /**set range for Subquery * @param range * @return * @see {@link #SUBQUERY_RANGE_ALL} * @see {@link #SUBQUERY_RANGE_ANY} */ public JSONRequest setSubqueryRange(String range) { return puts(KEY_SUBQUERY_RANGE, range); } /**set from for Subquery * @param range * @return */ public JSONRequest setSubqueryFrom(String from) { return puts(KEY_SUBQUERY_FROM, from); } //array object >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> /**create a parent JSONObject named KEY_ARRAY * @param count * @param page * @return {@link #toArray(int, int)} */ public JSONRequest toArray(int count, int page) { return toArray(count, page, null); } /**create a parent JSONObject named name+KEY_ARRAY. * @param count * @param page * @param name * @return {name+KEY_ARRAY : this}. if needs to be put, use {@link #putsAll(Map)} instead */ public JSONRequest toArray(int count, int page, String name) { return new JSONRequest(StringUtil.getString(name) + KEY_ARRAY, this.setCount(count).setPage(page)); } @Override public JSONObject putsAll(Map map) { super.putsAll(map); return this; } @Override public JSONRequest puts(Object value) { return puts(null, value); } @Override public JSONRequest puts(String key, Object value) { super.puts(key, value); return this; } }