• 关于

    判断是否为json

    的搜索结果

问题

怎么判断Android编程中出现的各种错误情况?

爵霸 2019-12-01 20:06:25 899 浏览量 回答数 1

回答

一般碰到这种情况先检查下发送的数据是否为JSON格式,不光是看可见的消息字符是否为JSON格式,同时检查下是否会因为设备端内存分配的问题,导致消息结尾包含了一些不可见字符,这样IoT套件也会认为这条消息不是合法的JSON格式直接丢弃的,然后再看下规则的SQL和发送的消息能否匹配以及规则是否已经启动,最后再判断下通过规则过滤后的数据对于云产品来说是否合法,后续我们会推出用户日志导入到自己的日志服务中的功能,更为方便地排查这种问题。

iot小能手 2019-12-02 01:45:42 0 浏览量 回答数 0

问题

jsoncpp如何判断json格式?

杨冬芳 2019-12-01 20:18:43 913 浏览量 回答数 1

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

学生动手场景应用,快速了解并掌握云服务器的各种新奇玩法!

回答

如果json返回是数组的话,用length是可以判断的,如果是判断是否是空对象可以参考下jquery的isEmptyObject方法。比如json为{}的时候。这个原理实现也很简单:isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; }

a123456678 2019-12-02 03:06:00 0 浏览量 回答数 0

问题

postobject的返回值是否可以为json格式

gmmywinlok 2019-12-01 21:02:27 4342 浏览量 回答数 1

回答

就问题论问题....首先你说的“判断字符串是否为json格式”,我觉得是没有必要的,为什么呢? 首先你的接口应该是json格式的而不是字符串,这是正常的逻辑,这样的话,外部给你的接口传字符串的话就传不过来,明白我的意思吗,我是说这个问题本不该是你判断的,因该是外部的问题,因为你的接口是固定的,他要调用你的借口,他就得服从你.....当然,现在解决你的问题... 请把你的代码搬过来,我看看...

杨冬芳 2019-12-02 03:04:50 0 浏览量 回答数 0

回答

一、配置层面 1、商户需要创建信用服务,并配置风控。 2、信用服务创建配置好之后,需要把信用服务推送上线才会生效。 3、推送后有一个审核的过程,通常为1-3个工作日会审核完毕,商户可以关注下。 4、有个芝麻分准入门槛,可以看下当前用户的信用分,是否满足配置的准入分。 5、详细配置介绍请参考,信用服务创建。 二、接口层面 1、资金冻结/发码接口中的category入参类目,需要和信用服务配置的类目一致。 2、enable_pay_channels是否有入参,信用冻结只有在enable_pay_channels没有入参或enable_pay_channels入参了CREDITZHIMA时才会走信用判断。 3、serviceId是否有入参,serviceId是后台创建信用服务后,生成的信用服务ID,如果不传serviceId也不会走到信用判断。 4、category和serviceId所在的json层级以及入参的格式,仔细对比demo确保无误,层级或json格式不对也会导致走不到信用判断。 三、业务层 1、用户本身存在问题,信用预授权是由风控模型自动进行判断,并非一定可以免押,也并非芝麻分高就可以免押 ,判断条件是多维度综合评估的。 2、签约销售方案中是否使用信用,勾选选为否的情况下,也是不能免押冻结的。

保持可爱mmm 2020-05-07 09:30:43 0 浏览量 回答数 0

回答

一、配置层面 1、商户需要创建信用服务,并配置风控。 2、信用服务创建配置好之后,需要把信用服务推送上线才会生效。 3、推送后有一个审核的过程,通常为1-3个工作日会审核完毕,商户可以关注下。 4、有个芝麻分准入门槛,可以看下当前用户的信用分,是否满足配置的准入分。 5、详细配置介绍请参考,信用服务创建。 二、接口层面 1、alipay.fund.auth.order.app.freeze接口中的category入参类目,需要和信用服务配置的类目一致。 2、enable_pay_channels是否有入参,信用冻结只有在enable_pay_channels没有入参或enable_pay_channels入参了CREDITZHIMA时才会走信用判断。 3、serviceId是否有入参,serviceId是后台创建信用服务后,生成的信用服务ID,如果不传serviceId也不会走到信用判断。 4、category和serviceId所在的json层级以及入参的格式,仔细对比demo确保无误,层级或json格式不对也会导致走不到信用判断。 三、业务层 1、用户本身存在问题,信用预授权是由风控模型自动进行判断,并非一定可以免押,也并非芝麻分高就可以免押 ,判断条件是多维度综合评估的。

保持可爱mmm 2020-05-07 10:16:05 0 浏览量 回答数 0

回答

1、jsonp必须遵循一个固定的格式。即请求的URL的search中必须存在一个jsonpcallback=functionName;响应的格式为functionName(/ json data /); 原理就是利用script不受同源策略限制的特点。2、在server返回数据之后,尽量删掉这个script。因为页面中有n多个jsonp,就会有n多个生成的script标签。造成dom臃肿。并且别人也可以通过观察html来指导你jsonp的请求细节。3、是看重写的mimeType是不是和server返回的一样。如果一样就没必要重写mimeType了。除此之外还用了setRequestHeader、overriderMimeType、abort等方法。4、看代码流程即可。我写了一个简单点的例子 (function (global) { // 防止低版本ie里,undefined被重写 var undefined = void(0); // 定义命名空间 var namespace = {}; // 默认的参数列表 var defaultOptions = { // ajax请求的路径是什么 url: '', // 往服务器发送的数据 data: '', // 使用什么http方法 type: 'get', // ajax请求方式,同步还是异步。默认为异步 async: true, // 成功时执行的函数 success: function (data) { }, // 失败时执行的函数 error: function (errInfo) { }, // 自定义请求首部列表 header: {}, // 重写的mimeType overrideMimeType: '', // 是否走缓存 cache: false, // 超时毫秒数。默认为0 表示不执行超时逻辑 timeout: 0, // 是否格式化参数为uri string processData: true, // 请求的mime类型 默认为表单提交 contentType: 'application/x-www-form-urlencoded', // 返回的数据格式 text|json dataType: 'text' }; /** * CORE * @param {Object} options 用户输入的参数 * @throw TypeError */ var ajax = function (options) { // 判断参数是否为对象,如果不是则抛出类型错误 if (!tool.isObject(options)) { throw new TypeError('参数类型错误'); } // 合并用户输入的参数列表和默认的参数列表 返回一个全新的参数列表对象 var userOptions = tool.extend(defaultOptions, options); // ajax第一步:获取ajax对象 var xhr = tool.getXHR(); // 1、如果是get系 需要把data拼接到url后面 if (/^(get|delete|head)$/img.test(userOptions.type)) { var data = tool.encodeToURIString(userOptions.data); userOptions.url = tool.hasSearch(userOptions.url, data); // 因为get系不需要传send参数,所以设置为null userOptions.data = null; } // 2、是否走缓存,如果不走缓存则在url后面加一个随机数来防止缓存 if (userOptions.cache === false) { // 因为search是有固定格式的 key=value 如果只写一个value是不合法的,所以必须构造一个key,而且这个key不能和已有的key重复 var random = '_=' + (Math.random() * 0xffffff).toFixed(0); userOptions.url = tool.hasSearch(userOptions.url, random); } // ajax操作第二步 xhr.open(userOptions.type, userOptions.url, userOptions.async); // 2.1 设置自定义请求首部信息 if (userOptions.header && tool.isObject(userOptions.header)) { tool.eachObject(userOptions.header, function (key, value) { xhr.setRequestHeader(key, value); }) } // 2.2 设置content-type http里表现mimeType的字段就是content-type // 设置请求的mimeType if (userOptions.contentType && tool.isString(userOptions.contentType)) { xhr.setRequestHeader('content-type', userOptions.contentType); } // 2.3 设置重写的mime类型 // 设置响应的mimeType if (userOptions.overrideMimeType && tool.isString(userOptions.overrideMimeType)) { xhr.overrideMimeType(userOptions.overrideMimeType); } // 2.4 判断是否执行超时逻辑 if (tool.isNumber(userOptions.timeout) && userOptions.timeout > 0) { xhr.timeout = userOptions.timeout; // 标准浏览器 if ('ontimeout' in xhr) { xhr.ontimeout = function () { userOptions.error('timeout'); } } else { // 低版本ie setTimeout(function () { // http的事务是否还没有完成 if (xhr.readyState !== 4) { // 强制终止http事务 xhr.abort(); } }, xhr.timeout); } } // 2.5 是否需要处理给服务器发送的数据,判断processData是否为true // 当给服务器发送的数据为二进制或者formData的时候,不需要处理这个数据 // 要把processData设置为false if (/^(post|put)$/igm.test(userOptions.type) && userOptions.processData === true) { userOptions.data = tool.encodeToURIString(userOptions.data); } // ajax第三步:接收响应 xhr.onreadystatechange = function () { // http的事务是否完成 if (xhr.readyState === 4) { // 获取响应主体 var responseText = xhr.responseText; // 判断状态码是否成功 if (/^2\d{2}$/.test(xhr.status)) { // 判断是否需要把响应主体格式化为json对象 if (userOptions.dataType === 'json') { // 因为不合法的json字符串无法转换为json对象,会出异常 try { responseText = tool.JSONParse(responseText); } catch (ex) { userOptions.error(ex); return; } } userOptions.success(responseText); // R如果响应码是错误的类型 } else if (/^(4|5)\d{2}$/.test(xhr.status)) { // 直接执行error userOptions.error(xhr.status); } } }; // ajax第四步:发送 xhr.send(userOptions.data); }; /** * 利用闭包,实现获取数据类型 * @param {string} type 数据类型 * @returns {Function} */ var getType = function (type) { return function (obj) { // 为什么要用Object.prototype.toString来判断类型? return Object.prototype.toString.call(obj) === '[object ' + type + ']'; } }; var tool = { /** * 利用惰性函数,实现获取ajax对象的方法 */ getXHR: (function () { var list = [function () { return new XMLHttpRequest; }, function () { return new ActiveXObject('Microsoft.XMLHTTP'); }, function () { return new ActiveXObject("Msxml2.XMLHTTP"); }, function () { return new ActiveXObject("Msxml3.XMLHTTP"); }]; var len = list.length; var xhr = null; while (len--) { try { list[len](); xhr = list[len]; break; } catch (ex) { continue; } } if (xhr !== null) { return xhr; } throw new Error('当前浏览器不支持此方法'); })(), /** * 合并多个对象 * @returns {{}} 合并后的对象 */ extend: function () { // 因为参数长度不固定,所以把参数列表转成数组 // var params = [].slice.call(arguments, 0); var voidObj = {}; this.each(arguments, function (item) { // item为每一个参数对象 tool.eachObject(item, function (key, value) { voidObj[key] = value; }); }); return voidObj; }, /** * 循环帮助函数,利用惰性函数 */ each: (function () { if ([].forEach) { return function (list, callback, context) { [].forEach.call(list, callback, context); } } return function (list, callback, context) { for (var i = 0, j = list.length; i < j; i++) { callback.call(context, list[i], i, list); } } })(), /** * 循环对象 * @param {Object} obj 要循环的对象 * @param {Function} callback 回调函数 * @param {Object|undefined} context 回调函数里头的上下文对象 */ eachObject: function (obj, callback, context) { for (var n in obj) { if (!obj.hasOwnProperty(n)) continue; callback.call(context, n, obj[n]); } }, /** * 给tool动态添加判断数据类型的方法 */ init: function () { this.each(['Object', 'Function', 'Array', 'String', 'Number'], function (item) { tool['is' + item] = getType(item); }) }, /** * 把一个对象格式化为uri string * @param {*} data 需要格式化的数据 * @return {string} 格式化之后得到的uri string */ encodeToURIString: function (data) { if (this.isString(data)) return data; if (!this.isObject(data)) return ''; var arr = []; this.eachObject(data, function (key, value) { arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); }); return arr.join('&'); }, /** * 往url后面拼接参数的方法 * @param {string} url url * @param {string} padString 要拼接的参数 * @returns {string} 拼接之后的url */ hasSearch: function (url, padString) { if (!padString) return url; // 如果有问号,说明url里已经有参数了,因为参数和参数之间用&来分隔 /*if (/\?/.test(url)) { return url + '&' + padString; } else { return url + '?' + padString; }*/ return url + (/\?/.test(url) ? '&' : '?') + padString; }, /** * 把json字符串格式化为json对象 * @param {string} jsonString json字符串 * @return {Object} json对象 */ JSONParse: function (jsonString) { if (window.JSON) { return JSON.parse(jsonString) } return eval('(' + jsonString + ')'); } }; tool.init(); // 把ajax方法放入命名空间中 namespace.ajax = ajax; tool.each(['get', 'post'], function (item) { /** * 动态添加get和post方法 * @param {string} url 请求的url * @param {Object} data 往服务器发送的数据 * @param {Function} callback 成功的回调函数 * @param {string} dataType 数据格式 */ namespace[item] = function (url, data, callback, dataType) { ajax({ url: url, type: item, data: data, success: callback, dataType: dataType }); } }); // 先把全局里已经存在的x先放到一边 var globalX = global.x; /** * 解决全局变量名冲突 * @param {string|undefined} symbol 更改的全局变量名 * @returns {Object} */ namespace.noConflict = function (symbol) { if (symbol && tool.isString(symbol)) { window[symbol] = namespace; } global!==undefined&&(window.x = globalX); return namespace; }; // 暴露到全局环境中 global.x = namespace; })(this); 用法和jquery的一样。不过我暴露的是x变量,不是$.

小旋风柴进 2019-12-02 02:28:33 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 使用规则引擎时,若您的数据为JSON格式,可以编写SQL来解析和处理数据。规则引擎对二进制格式的数据不做解析,直接透传。本文主要讲解SQL表达式。 SQL表达式 JSON数据可以映射为虚拟的表,其中Key对应表的列,Value对应列值,这样就可以使用SQL处理。为便于理解,我们将规则引擎的一条规则抽象为一条SQL表达(类试MySQL语法): 例如某环境传感器用于火灾预警,可以采集温度、湿度及气压数据,上报数据内容如下: { "temperature":25.1 "humidity":65 "pressure":101.5 "location":"xxx,xxx" } 假定温度大于38,湿度小于40时,需要触发报警,可以编写如下的SQL语句:SELECT temperature as t, deviceName() as deviceName, location FROM /ProductA/+/update WHERE temperature > 38 and humidity < 40 当上报的数据中,温度大于38且湿度小于40时,会触发该规则,并且解析数据中的温度、设备名称、位置,用于进一步处理。 FROM FROM 需要填写Topic通配符,用于匹配需要处理的消息Topic。当有符合Topic规则的消息到达时,消息的payload数据以json格式解析,并根据SQL语句进行处理(如果消息格式不合法,将忽略此消息)。您可以使用topic()函数引用具体的Topic值。 上文例子中,"FROM /ProductA/+/update"语句表示该SQL仅处理符合/ProductA/+/update格式的消息,具体匹配参考 Topic。 SELECT JSON数据格式 select语句中的字段,可以使用上报消息的payload解析结果,即json中的键值,也可以使用SQL内置的函数,比如deviceName()。不支持子SQL查询。 上报的json数据格式,可以是数组或者嵌套的json,SQL语句支持使用json path获取其中的属性值,如对于{a:{key1:v1, key2:v2}},可以通过a.key2 获取到值v2。使用变量时需要注意单双引号区别:单引号表示常量,双引号或不加引号表示变量。如使用单引号'a.key2',值为a.key2。 内置的SQL函数可以参考函数列表。 例如上文,"SELECT temperature as t, deviceName() as deviceName, location"语句,其中temperature和loaction来自于上报数据中的字段,deviceName()则使用了内置的SQL函数。 二进制数据格式 目前二进制数据不支持解析payload中的字段,SELECT语句固定为SELECT *,表示透传二进制数据。 WHERE JSON数据格式 规则触发条件,条件表达式。不支持子SQL查询。WHERE中可以使用的字段和SELECT语句一致,当接收到对应topic的消息时,WHERE语句的结果会作为规则是否触发的判断条件。具体条件表达式列表见下方表格。上文例子中, "WHERE temperature > 38 and humidity < 40" 表示温度大于38且湿度小于40时,才会触发该规则,执行配置。 二进制数据格式 目前二进制格式WHERE语句中仅支持内置函数及条件表达式,无法使用payload中的字段。 SQL结果 SQL语句执行完成后,会得到对应的SQL结果,用于下一步转发处理。如果payload数据解析过程中出错会导致规则运行失败。 转发数据动作中的表达式需要使用 ${表达式} 引用对应的值。 对于上文例子,配置转发动作时,可以${t}、${deviceName}和${loaction}获取SQL解析结果,如果要将数据存储到TableStore,配置中可以使用${t}、${deviceName}和${loaction}。 数组使用说明 数组表达式需要使用双引号,比如设备消息为:{a:[{v:1},{v:2},{v:3}]},那么SQL语句中的select写法为:select "$.a[0]" data1,".a[1].v" data2,".a[2]" data3,则data1={v:1},data2=2,data3=[{v:3}]。 条件表达式支持列表 操作符 描述 举例 = 相等 color = ‘red’ <> 不等于 color <> ‘red’ AND 逻辑与 color = ‘red’ AND siren = ‘on’ OR 逻辑或 color = ‘red’ OR siren = ‘on’ ( ) 括号代表一个整体 color = ‘red’ AND (siren = ‘on’ OR isTest) + 算术加法 4 + 5 - 算术减 5 - 4 / 除 20 / 4 * 乘 5 * 4 % 取余数 20 % 6 < 小于 5 < 6 <= 小于或等于 5 <= 6 > 大于 6 > 5 >= 大于或等于 6 >= 5 函数调用 支持函数,详细列表请参考函数列表。 deviceId() JSON属性表达式 可以从消息payload以json表达式提取属性。 state.desired.color,a.b.c[0].d CASE … WHEN … THEN … ELSE …END Case 表达式 CASE col WHEN 1 THEN ‘Y’ WHEN 0 THEN ‘N’ ELSE ‘’ END as flag IN 仅支持枚举,不支持子查询。 比如 where a in(1,2,3)。不支持以下形式: where a in(select xxx) like 匹配某个字符, 仅支持%号通配符,代表匹配任意字符串。 比如 where c1 like ‘%abc’, where c1 not like ‘%def%’

2019-12-01 23:11:54 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 使用规则引擎时,若您的数据为JSON格式,可以编写SQL来解析和处理数据。规则引擎对二进制格式的数据不做解析,直接透传。本文主要讲解SQL表达式。 SQL表达式 JSON数据可以映射为虚拟的表,其中Key对应表的列,Value对应列值,这样就可以使用SQL处理。为便于理解,我们将规则引擎的一条规则抽象为一条SQL表达(类试MySQL语法): 例如某环境传感器用于火灾预警,可以采集温度、湿度及气压数据,上报数据内容如下: { "temperature":25.1 "humidity":65 "pressure":101.5 "location":"xxx,xxx" } 假定温度大于38,湿度小于40时,需要触发报警,可以编写如下的SQL语句:SELECT temperature as t, deviceName() as deviceName, location FROM /ProductA/+/update WHERE temperature > 38 and humidity < 40 当上报的数据中,温度大于38且湿度小于40时,会触发该规则,并且解析数据中的温度、设备名称、位置,用于进一步处理。 FROM FROM 需要填写Topic通配符,用于匹配需要处理的消息Topic。当有符合Topic规则的消息到达时,消息的payload数据以json格式解析,并根据SQL语句进行处理(如果消息格式不合法,将忽略此消息)。您可以使用topic()函数引用具体的Topic值。 上文例子中,"FROM /ProductA/+/update"语句表示该SQL仅处理符合/ProductA/+/update格式的消息,具体匹配参考 Topic。 SELECT JSON数据格式 select语句中的字段,可以使用上报消息的payload解析结果,即json中的键值,也可以使用SQL内置的函数,比如deviceName()。不支持子SQL查询。 上报的json数据格式,可以是数组或者嵌套的json,SQL语句支持使用json path获取其中的属性值,如对于{a:{key1:v1, key2:v2}},可以通过a.key2 获取到值v2。使用变量时需要注意单双引号区别:单引号表示常量,双引号或不加引号表示变量。如使用单引号'a.key2',值为a.key2。 内置的SQL函数可以参考函数列表。 例如上文,"SELECT temperature as t, deviceName() as deviceName, location"语句,其中temperature和loaction来自于上报数据中的字段,deviceName()则使用了内置的SQL函数。 二进制数据格式 目前二进制数据不支持解析payload中的字段,SELECT语句固定为SELECT *,表示透传二进制数据。 WHERE JSON数据格式 规则触发条件,条件表达式。不支持子SQL查询。WHERE中可以使用的字段和SELECT语句一致,当接收到对应topic的消息时,WHERE语句的结果会作为规则是否触发的判断条件。具体条件表达式列表见下方表格。上文例子中, "WHERE temperature > 38 and humidity < 40" 表示温度大于38且湿度小于40时,才会触发该规则,执行配置。 二进制数据格式 目前二进制格式WHERE语句中仅支持内置函数及条件表达式,无法使用payload中的字段。 SQL结果 SQL语句执行完成后,会得到对应的SQL结果,用于下一步转发处理。如果payload数据解析过程中出错会导致规则运行失败。 转发数据动作中的表达式需要使用 ${表达式} 引用对应的值。 对于上文例子,配置转发动作时,可以${t}、${deviceName}和${loaction}获取SQL解析结果,如果要将数据存储到TableStore,配置中可以使用${t}、${deviceName}和${loaction}。 数组使用说明 数组表达式需要使用双引号,比如设备消息为:{a:[{v:1},{v:2},{v:3}]},那么SQL语句中的select写法为:select "$.a[0]" data1,".a[1].v" data2,".a[2]" data3,则data1={v:1},data2=2,data3=[{v:3}]。 条件表达式支持列表 操作符 描述 举例 = 相等 color = ‘red’ <> 不等于 color <> ‘red’ AND 逻辑与 color = ‘red’ AND siren = ‘on’ OR 逻辑或 color = ‘red’ OR siren = ‘on’ ( ) 括号代表一个整体 color = ‘red’ AND (siren = ‘on’ OR isTest) + 算术加法 4 + 5 - 算术减 5 - 4 / 除 20 / 4 * 乘 5 * 4 % 取余数 20 % 6 < 小于 5 < 6 <= 小于或等于 5 <= 6 > 大于 6 > 5 >= 大于或等于 6 >= 5 函数调用 支持函数,详细列表请参考函数列表。 deviceId() JSON属性表达式 可以从消息payload以json表达式提取属性。 state.desired.color,a.b.c[0].d CASE … WHEN … THEN … ELSE …END Case 表达式 CASE col WHEN 1 THEN ‘Y’ WHEN 0 THEN ‘N’ ELSE ‘’ END as flag IN 仅支持枚举,不支持子查询。 比如 where a in(1,2,3)。不支持以下形式: where a in(select xxx) like 匹配某个字符, 仅支持%号通配符,代表匹配任意字符串。 比如 where c1 like ‘%abc’, where c1 not like ‘%def%’

2019-12-01 23:11:54 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 使用规则引擎时,若您的数据为JSON格式,可以编写SQL来解析和处理数据。规则引擎对二进制格式的数据不做解析,直接透传。本文主要讲解SQL表达式。 SQL表达式 JSON数据可以映射为虚拟的表,其中Key对应表的列,Value对应列值,这样就可以使用SQL处理。为便于理解,我们将规则引擎的一条规则抽象为一条SQL表达(类试MySQL语法): 例如某环境传感器用于火灾预警,可以采集温度、湿度及气压数据,上报数据内容如下: { "temperature":25.1 "humidity":65 "pressure":101.5 "location":"xxx,xxx" } 假定温度大于38,湿度小于40时,需要触发报警,可以编写如下的SQL语句:SELECT temperature as t, deviceName() as deviceName, location FROM /ProductA/+/update WHERE temperature > 38 and humidity < 40 当上报的数据中,温度大于38且湿度小于40时,会触发该规则,并且解析数据中的温度、设备名称、位置,用于进一步处理。 FROM FROM 需要填写Topic通配符,用于匹配需要处理的消息Topic。当有符合Topic规则的消息到达时,消息的payload数据以json格式解析,并根据SQL语句进行处理(如果消息格式不合法,将忽略此消息)。您可以使用topic()函数引用具体的Topic值。 上文例子中,"FROM /ProductA/+/update"语句表示该SQL仅处理符合/ProductA/+/update格式的消息,具体匹配参考 Topic。 SELECT JSON数据格式 select语句中的字段,可以使用上报消息的payload解析结果,即json中的键值,也可以使用SQL内置的函数,比如deviceName()。不支持子SQL查询。 上报的json数据格式,可以是数组或者嵌套的json,SQL语句支持使用json path获取其中的属性值,如对于{a:{key1:v1, key2:v2}},可以通过a.key2 获取到值v2。使用变量时需要注意单双引号区别:单引号表示常量,双引号或不加引号表示变量。如使用单引号'a.key2',值为a.key2。 内置的SQL函数可以参考函数列表。 例如上文,"SELECT temperature as t, deviceName() as deviceName, location"语句,其中temperature和loaction来自于上报数据中的字段,deviceName()则使用了内置的SQL函数。 二进制数据格式 目前二进制数据不支持解析payload中的字段,SELECT语句固定为SELECT *,表示透传二进制数据。 WHERE JSON数据格式 规则触发条件,条件表达式。不支持子SQL查询。WHERE中可以使用的字段和SELECT语句一致,当接收到对应topic的消息时,WHERE语句的结果会作为规则是否触发的判断条件。具体条件表达式列表见下方表格。上文例子中, "WHERE temperature > 38 and humidity < 40" 表示温度大于38且湿度小于40时,才会触发该规则,执行配置。 二进制数据格式 目前二进制格式WHERE语句中仅支持内置函数及条件表达式,无法使用payload中的字段。 SQL结果 SQL语句执行完成后,会得到对应的SQL结果,用于下一步转发处理。如果payload数据解析过程中出错会导致规则运行失败。 转发数据动作中的表达式需要使用 ${表达式} 引用对应的值。 对于上文例子,配置转发动作时,可以${t}、${deviceName}和${loaction}获取SQL解析结果,如果要将数据存储到TableStore,配置中可以使用${t}、${deviceName}和${loaction}。 数组使用说明 数组表达式需要使用双引号,比如设备消息为:{a:[{v:1},{v:2},{v:3}]},那么SQL语句中的select写法为:select "$.a[0]" data1,".a[1].v" data2,".a[2]" data3,则data1={v:1},data2=2,data3=[{v:3}]。 条件表达式支持列表 操作符 描述 举例 = 相等 color = ‘red’ <> 不等于 color <> ‘red’ AND 逻辑与 color = ‘red’ AND siren = ‘on’ OR 逻辑或 color = ‘red’ OR siren = ‘on’ ( ) 括号代表一个整体 color = ‘red’ AND (siren = ‘on’ OR isTest) + 算术加法 4 + 5 - 算术减 5 - 4 / 除 20 / 4 * 乘 5 * 4 % 取余数 20 % 6 < 小于 5 < 6 <= 小于或等于 5 <= 6 > 大于 6 > 5 >= 大于或等于 6 >= 5 函数调用 支持函数,详细列表请参考函数列表。 deviceId() JSON属性表达式 可以从消息payload以json表达式提取属性。 state.desired.color,a.b.c[0].d CASE … WHEN … THEN … ELSE …END Case 表达式 CASE col WHEN 1 THEN ‘Y’ WHEN 0 THEN ‘N’ ELSE ‘’ END as flag IN 仅支持枚举,不支持子查询。 比如 where a in(1,2,3)。不支持以下形式: where a in(select xxx) like 匹配某个字符, 仅支持%号通配符,代表匹配任意字符串。 比如 where c1 like ‘%abc’, where c1 not like ‘%def%’

2019-12-01 23:11:54 0 浏览量 回答数 0

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

回答

中文字符没有escape?java那边不需要那样 java端用的什么json库?试试fastjson库?我是对接第三方的接口 报啥错,截图下 header有没有设置json,还有utf-8 这是报错信息 这是我发送的 这是我的数据结构   PHP将List,ArrayList,Map,Hashmap视为数组,而Java区分很严格,使用(),还是{},还是用[]对与PHP没有那么多要求。 Java差一点都不能decode.你要搞明白(),[],{}还要注意Int,Float,String,java是强类型的比如上面的5.94是字符串,是否需要转换为浮点型好的多谢提醒,正在排查这个问题 引用来自“neo-chen”的评论 PHP将List,ArrayList,Map,Hashmap视为数组,而Java区分很严格,使用(),还是{},还是用[]对与PHP没有那么多要求。 Java差一点都不能decode.你要搞明白(),[],{} 我们公司进行数据交互的时候 json中的所有字段全部定为String类型的 然后再在服务端进行转换 判断一下是不是编码问题。和java端配合调试一下。看他收到你的请求体内容 现在解决了吗我也遇到楼主的问题,这边base64加密后就没问题。如果不加密有好的办法吗  

爱吃鱼的程序员 2020-06-08 17:02:46 0 浏览量 回答数 0

回答

$.ajax({ // 请求发送方式 type: 'post', // 验证文件 url: 'check.php', // 用户输入的帐号密码 data: {'username': $("#username").val(), 'password': $("#password").val()}, // 异步,不写默认为True async: true, //请求成功后的回调 success: function(data){ if (data){ alert('登录成功') }else{ alert('帐号或密码错误'); } }, error: function(){ alert('服务端异常'); } }) 服务端通过查询 输入 1 或者 0 来判断是否正确建议前后端通过json来传输数据

小旋风柴进 2019-12-02 02:22:30 0 浏览量 回答数 0

回答

ConvertOfficeFormat 该接口实现 OFFICE 文档格式的转换,用于文档打印、预览等场景。 它采用 同步请求 方式执行,执行完毕返回转换成功的页数。注意,同步转换超时时间为 5秒,如果大于 5秒 的转换需要使用异步接口 CreateOfficeConversionTask 。 请求参数 名称 类型 是否必填 描述 Project String 是 项目名 Action String 是 ConvertOfficeFormat SrcUri String 是 源数据的存储位置, OSS 资源采用如下格式”oss://bucket1/object” SrcType String 否 源数据的后缀类型,当前文档转换根据 OSS 对象的后缀名来确定源数据类型,当 OSS 对象没有后缀名时,可以设置该值 TgtType String 是 转换输出目标文件类型: vector,转成向量文件,需要使用 js 引擎来进行渲染 png,转成 png 格式的图片文件 jpg,转成 jpg 格式的图片文件 pdf,转成 pdf 文件 text,转成只包含文本内容的文件,主要用来提取文件的文本内容,注意只支持演示和表格文件类型 TgtUri String 是 转换输出内容到目标位置,建议 TgtUri 和 SrcUri 在同一个桶,便于权限管理 例如 OSS 桶的指定前缀”oss://bucket1/converttasks/session123/“ Password String 否 Office 文档的打开密码,如果需要转换有密码的文档,请设置该字段 StartPage int 否 从第 x 页开始转换,默认为1 EndPage int 否 转换至第 x 页,默认为200,如果需要转换全部页,设置为-1 MaxSheetRow int 否 表格文件转换最大行数,默认为1000。如果需要转换所有行,设置为-1 MaxSheetCol int 否 表格文件转换最大列数,默认为100,如果需要转换所有行,设置为-1 MaxSheetCount int 否 表格文件转换最多 sheet 数,如果需要转换所有Sheet,设置为-1 FitToPagesTall bool 否 表格文件转 pdf 时,将行全部输出到一页,默认为 false,只有设置 TgtType 为 pdf 时才会生效 FitToPagesWide bool 否 表格文件转 pdf 时,将列全部输出在一页,默认为 false,只有设置 TgtType 为 pdf 时才会生效 TgtFilePrefix String 否 转换后的文件名称前缀,在目标类型为 jpg, png, pdf 时才生效,可以是英文,数字,横划线,下划线,长度不超过256个字符,参考自定义目标文件名称 TgtFileSuffix String 否 转换后的文件名称后缀,在目标类型为 jpg, png, pdf 时才生效,可以是英文,数字,横划线,下划线,点号,长度不超过256个字符,参考自定义目标文件名称 TgtFilePages String 否 转换后输出指定文件页数,在目标类型为 jpg, png, pdf时才生效,默认输出所有页。例如:[1, 2, 100],只会输出1,2,100页到 TgtUri,最多指定100个页数,如果超过100页,请分多次转换进行提交 PdfVector bool 否 pdf 转换成 vector 时,是否使用向量模式,默认为 false true:使用向量模式,预览效果比较清晰,转换耗时较长 false:使用图片模式,预览效果一般,转换耗时较短 Hidecomments bool 否 word, ppt 转换成 vector, jpg, png 时,是否隐藏批注和应用修订,默认为 false true:隐藏批注,应用修订 false:显示批注和修订 DisplayDpi int 否 转换 jpg,png 时,设置图片分辨率,取值范围[96, 2048] 目前支持的 输入文件类型 包含如下 48 种格式: 演示文件:pptx、ppt、pot、potx、pps、ppsx、dps、dpt、pptm、potm、ppsm。 表格文件:xls、xlt、et、ett、xlsx、xltx、csv、xlsb、xlsm、xltm。 文字文件:doc、dot、wps、wpt、docx、dotx、docm、dotm。 其他格式文件: pdf、 lrc、 c、 cpp、 h、 asm、 s、 java、 asp、 bat、 bas、 prg、 cmd、 rtf、 txt、 log、 xml、 htm、 html。 目前支持的 输出文件类型 有如下 4 种: vector 向量模式,使用智能媒体管理产品提供的 前端渲染引擎,更好的支持翻页、缩放。 jpg 模式,按文件样式每页生成一张 jpg 图片。 png 模式,按文件样式每页生成一张 png 图片。 pdf 模式,每个文件生成一个 pdf 文件。 text 模式,按文件样式每页生成一个 text 文件 返回参数 名称 类型 描述 RequestId String 用户发送的每次接口调用请求,无论成功与否,系统都会返回一个唯一识别码 RequestId 给用户 PageCount Integer 转换成功的页数 基于TgtUri返回TgtLoc,在OSS对象存储中的命名规则 基于 TgtUri 参数指定的前缀,比如/bucket1/imm-format-convert-tgt/session123/,根据转换目标类型的不同,那么生成的目标文件也有所不同: 目标类型为 vector 时 如果源文件为非 excel 类型 /bucket1/imm-format-convert-tgt/session123/doc/meta.json /bucket1/imm-format-convert-tgt/session123/doc/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/fp[...].json /bucket1/imm-format-convert-tgt/session123/doc/I/1 /bucket1/imm-format-convert-tgt/session123/doc/I/2 /bucket1/imm-format-convert-tgt/session123/doc/I/[...] 如果源文件为 excel 类型 /bucket1/imm-format-convert-tgt/session123/doc/meta.json /bucket1/imm-format-convert-tgt/session123/doc/s1/meta.json /bucket1/imm-format-convert-tgt/session123/doc/s1/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/s1/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/s1/fp[...].json /bucket1/imm-format-convert-tgt/session123/doc/s2/meta.json /bucket1/imm-format-convert-tgt/session123/doc/s2/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/s2/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/s2/fp[...].json /bucket1/imm-format-convert-tgt/session123/doc/s[...] /meta.json /bucket1/imm-format-convert-tgt/session123/doc/s[...]/fp1.json /bucket1/imm-format-convert-tgt/session123/doc/s[...]/fp2.json /bucket1/imm-format-convert-tgt/session123/doc/s[...]/fp[...].json 注意:vector 模式需要使用特定的 js 引擎进行渲染。 目标类型为 jpg 时 如果源文件为非 excel 类型 /bucket1/imm-format-convert-tgt/session123/1.jpg /bucket1/imm-format-convert-tgt/session123/2.jpg /bucket1/imm-format-convert-tgt/session123/[...].jpg 如果源文件为 excel 类型 /bucket1/imm-format-convert-tgt/session123/s1/1.jpg /bucket1/imm-format-convert-tgt/session123/s1/2.jpg /bucket1/imm-format-convert-tgt/session123/s1/[...].jpg /bucket1/imm-format-convert-tgt/session123/s2/1.jpg /bucket1/imm-format-convert-tgt/session123/s2/2.jpg /bucket1/imm-format-convert-tgt/session123/s2/[...].jpg /bucket1/imm-format-convert-tgt/session123/s[...]/1.jpg /bucket1/imm-format-convert-tgt/session123/s[...]/2.jpg /bucket1/imm-format-convert-tgt/session123/s[...]/[...].jpg 注意:源文件为 excel 类型时,会先根据 excel 的表格数,生成对应数量的文件夹,再在对应的文件夹下,生成对应数量的 jpg 文件 目标类型为 png 时 如果源文件为非 excel 类型 /bucket1/imm-format-convert-tgt/session123/1.png /bucket1/imm-format-convert-tgt/session123/2.png /bucket1/imm-format-convert-tgt/session123/[...].png 如果源文件为 excel 类型 /bucket1/imm-format-convert-tgt/session123/s1/1.png /bucket1/imm-format-convert-tgt/session123/s1/2.png /bucket1/imm-format-convert-tgt/session123/s1/[...].png /bucket1/imm-format-convert-tgt/session123/s2/1.png /bucket1/imm-format-convert-tgt/session123/s2/2.png /bucket1/imm-format-convert-tgt/session123/s2/[...].png /bucket1/imm-format-convert-tgt/session123/s[...]/1.png /bucket1/imm-format-convert-tgt/session123/s[...]/2.png /bucket1/imm-format-convert-tgt/session123/s[...]/[...].png 注意:源文件为 excel 类型时,会先根据 excel 的表格数,生产对应数量的文件夹,再在对应的文件夹下,生成对应数量的 png 文件 目标类型为 pdf 时 /bucket1/imm-format-convert-tgt/session123/1.pdf 注意:转换 pdf 时,无论源文件是什么类型,都只会生成一个 pdf 文件 目标类型为 text 时 /bucket1/imm-format-convert-tgt/session123/1.text /bucket1/imm-format-convert-tgt/session123/2.text /bucket1/imm-format-convert-tgt/session123/[...].text 注意:只支持演示类型和文字类型的源文件 重复请求处理 基于幂等性的要求, 两次相同操作以最后执行的请求为准。 如果两次执行操作的内容相同或者重复请求(内容相同,SignatureNonce 也相同),并且系统已经存在该任务,则后续的请求直接返回成功,避免消耗计算资源做相同的任务。 转换生成目标文件 生成的目标文件会持久化保存,推荐为某个桶下的 /imm-format-convert-tgt/${name} 路径,从而便于维护管理。 您可以主动删除转换后的目标文件,如果不主动删除则会长期保留以备使用,但是会占用存储空间。如果希望自动的删除目标文件,您也可以在 /imm-format-convert-tgt 前缀下配置 OSS 的生命周期,这样目标文件在到期后,会根据策略被清除。 自定义目标文件名称 当前文档转换通过设置 TgtFilePrefix 和 TgtFileSuffix 来支持自定义文件名称 假设 TgtType 为 jpg,则目标文件名称规则如下: TgtFilePrefix 和 TgtFileSuffix 都为空的条件下,目标文件名称为:[x].jpg TgtFilePrefix 为空,TgtFileSuffix 为 aa,则目标文件名称为:[x]aa TgtFilePrefix 为 aa,TgtFileSuffix 为空,则目标文件名称为:aa[x] TgtFilePrefix 为 aa,TgtFileSuffix 为 bb,则目标文件名称为:aa[x]bb 备注:[x] 表示多个目标文件,从1开始,如果转换后的文件有8页,则所有的目标文件为: aa[1]bb, aa[2]bb, …, aa[8]bb 示例 请求示例 POST https://imm.cn-shanghai.aliyuncs.com ?Action=ConvertOfficeFormat &Project=test &SrcUri="oss://bucket1/test.pptx" &TgtType=vector &TgtUri="oss://bucket1/imm-format-convert-tgt/session123/" ... 此处的示例,目的是展示关键参数,还需要其他的公共参数才能正常调用,推荐使用 SDK 来发送 API。 成功返回示例 { "RequestId": "FF3B7D81-66AE-47E0-BF69-157DCF187514", "PageCount": 10 } 特殊错误码 如果转换出错,在返回的 JSON 中会包含如下字段 { "RequestId": "7DA1FCD1-004C-4EB4-B039-C6BBDCEB0701", "HostId": "imm.cn-shanghai.aliyuncs.com", "Code": "DocumentConvertFailed.NeedPassword", "Message": "The conversion has been failed, need password to open file." } 错误代码 说明 OSSAccessError OSS 访问失败,请检查 SrcUri,TgtUri 对应的 bucket,路径是否存在,所在 Region 是否和 IMM Region 一致 InvalidParameter.SrcType.NotSupported 不支持的文件类型,当前文档转换根据文件后缀名来判断文件类型,请检查文件后缀名,SrcType 参数 DocumentConvertFailed.ExceedFileSizeLimit 当前文档转换默认支持 40 MB 文件大小,超过该大小的文件转换时会抛出该错误 DocumentConvertFailed.OpenFileError 转换时,打开文件失败,请检查源文档后缀和内容是否匹配 DocumentConvertFailed.ExportFileError 转换时,处理文件内容失败,请检查源文档是否能够正常打开 DocumentConvertFailed.NeedPassword 该文档需要密码才能打开,请设置 Password 参数 ExecutionTimeout 执行超时,请检查文档大小,页数,如果确实需要转换,请使用异步接口 CreateOfficeConversionTask InternalError 内部错误,请开工单并提供 RequestId

1934890530796658 2020-03-31 12:46:55 0 浏览量 回答数 0

问题

低级接口的使用

云栖大讲堂 2019-12-01 21:09:01 1648 浏览量 回答数 1

回答

最简单的直接用 @ResponseBody返回。 其二我经常使用的多视图,代码如下: JsonView.java package com.szfore.springmvc; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.util.CollectionUtils; import org.springframework.validation.BindingResult; import org.springframework.web.servlet.view.AbstractView; import com.google.gson.Gson; /** * <b>function:</b>扩展AbstractView 实现JSON-lib视图 * @author hoojo * @createDate 2011-4-28 下午05:26:43 * @file MappingJsonlibVeiw.java * @package com.hoo.veiw.xml * @project SpringMVC4View * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class JsonView extends AbstractView { public static final String DEFAULT_CONTENT_TYPE = "application/json"; public static final String HTML_CONTENT_TYPE = "text/html"; public static final String DEFAULT_CHAR_ENCODING = "UTF-8"; private String encodeing = DEFAULT_CHAR_ENCODING; private Object jsonData = null; private Map<String, Object> _jsonDataMap = new HashMap<String, Object>(); public void setEncodeing(String encodeing) { this.encodeing = encodeing; } private Set<String> renderedAttributes; public JsonView() { setContentType(DEFAULT_CONTENT_TYPE); } public JsonView(Object data) { setContentType(DEFAULT_CONTENT_TYPE); this.jsonData =data; } @Override protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setCharacterEncoding(encodeing); response.setContentType(getContentType()); PrintWriter out = response.getWriter(); if(jsonData != null){ out.print(new Gson().toJson(jsonData)); }else if(!_jsonDataMap.isEmpty()){ out.print(new Gson().toJson(_jsonDataMap)); }else { model = filterModel(model); out.print(new Gson().toJson(model)); } } /** * Filters out undesired attributes from the given model. * <p>Default implementation removes {@link BindingResult} instances and entries not included in the {@link * #setRenderedAttributes(Set) renderedAttributes} property. */ protected Map<String, Object> filterModel(Map<String, Object> model) { Map<String, Object> result = new HashMap<String, Object>(model.size()); Set<String> renderedAttributes = !CollectionUtils.isEmpty(this.renderedAttributes) ? this.renderedAttributes : model.keySet(); for (Map.Entry<String, Object> entry : model.entrySet()) { if (!(entry.getValue() instanceof BindingResult) && renderedAttributes.contains(entry.getKey())) { result.put(entry.getKey(), entry.getValue()); } } return result; } public void setJsonData(Object jsonData){ this.jsonData = jsonData; } public static JsonView returnJson(Object jsonData){ JsonView jsonView = new JsonView(); jsonView.setJsonData(jsonData); return jsonView; } public JsonView put(String key, Object value) { _jsonDataMap.put(key, value); return this; } } MultiViewResover.java package com.szfore.springmvc; import java.util.Locale; import java.util.Map; import org.springframework.web.servlet.View; import org.springframework.web.servlet.ViewResolver; /** * @author Jeson * @blog:http://www.gbsou.com * @date:Oct 20, 2009 8:39:27 AM * @version :1.0 * */ public class MultiViewResover implements ViewResolver { private Map<String, ViewResolver> resolvers; private final static String DEFAULT_RESOLVER = "jsp"; private final static String JSON_RESOLVER = "json"; private final static String JSON_VIEW_NAME = "jsonView"; /* * 自定义resolve类默认为jsp视图,其余视图用下划线分隔 */ @Override public View resolveViewName(String viewName, Locale locale) throws Exception { //判断是否为json String tmpViewName = viewName.trim().toLowerCase(); if(JSON_RESOLVER.equals(tmpViewName)){ ViewResolver resolver = resolvers.get(JSON_RESOLVER); return resolver.resolveViewName(JSON_VIEW_NAME, locale); } //若无下划线,默认转向jsp视图 int n = viewName.lastIndexOf("_"); if (n == (-1)){ ViewResolver resolver = resolvers.get(DEFAULT_RESOLVER); return resolver.resolveViewName(viewName, locale); } //有的话截取下划线后面的字符串 这里一般是jsp,ftl,vm与配置文件中的<entry key="ftl">的key匹配 String suffix = viewName.substring(n + 1); // 根据下划线后面的字符串去获取托管的视图解析类对象 ViewResolver resolver = resolvers.get(suffix); // 取下划线前面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是hello_jsp viewName = viewName.substring(0, n); if (resolver != null){ return resolver.resolveViewName(viewName, locale); } return null; } public Map<String, ViewResolver> getResolvers() { return resolvers; } public void setResolvers(Map<String, ViewResolver> resolvers) { this.resolvers = resolvers; } } xml配置 <!-- 多视图 --> <bean name="jsonView" class="com.szfore.springmvc.JsonView"> </bean> <bean id="viewResolver" class="com.szfore.springmvc.MultiViewResover"> <property name="resolvers"> <map> <entry key="jsp"> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/" /> <property name="suffix" value=".jsp" /> </bean> </entry> <entry key="json"> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> </bean> </entry> </map> </property> </bean> 使用方法: 4 @RequestMapping("/test") public JsonView test(){ return new JsonView(new User()); }

a123456678 2019-12-02 02:11:11 0 浏览量 回答数 0

问题

IOS的APP客户端与服务端接口对接,求大神帮忙,有报酬

杨冬芳 2019-12-01 20:13:24 887 浏览量 回答数 1

问题

json数据值读取时 提示typeerror错误?报错

爱吃鱼的程序员 2020-06-09 10:54:02 0 浏览量 回答数 1

回答

Logtail具备自身健康度以及日志采集进度查询的功能,便于您对于日志采集问题进行自检,同时您可基于该功能定制日志采集的状态监控。 使用指南 all命令 active命令 logstore命令 logfile命令 history命令 命令返回值 功能使用场景示例 监控Logtail运行状态 监控日志采集进度 判断日志文件是否采集完毕 日志采集问题排查 使用指南 确认已安装支持状态查询功能的Logtail客户端之后,在客户端输入相对命令即可查询本地采集状态。安装Logtail参见安装Logtail(Linux系统)。 在客户端输入命令 /etc/init.d/ilogtaild -h,确认当前客户端是否支持本地采集状态查询功能。若输出logtail insight, version关键字则表示已安装支持此功能的Logtail。 /etc/init.d/ilogtaild -h Usage: ./ilogtaild { start | stop (graceful, flush data and save checkpoints) | force-stop | status | -h for help}$ logtail insight, version : 0.1.0 commond list : status all [index] get logtail running status status active [--logstore | --logfile] index [project] [logstore] list all active logstore | logfile. if use --logfile, please add project and logstore. default --logstore status logstore [--format=line | json] index project logstore get logstore status with line or json style. default --format=line status logfile [--format=line | json] index project logstore fileFullPath get log file status with line or json style. default --format=line status history beginIndex endIndex project logstore [fileFullPath] query logstore | logfile history status. index : from 1 to 60. in all, it means last $(index) minutes; in active/logstore/logfile/history, it means last $(index)*10 minutes Logtail目前支持的查询命令、命令功能、可查询的时间区间以及结果统计的时间窗口如下: 命令 功能 可查询时间区间 统计窗口 all 查询Logtail的运行状态 最近60分钟 1分钟 active 查询当前活跃(有数据采集)的Logstore或日志文件 最近600分钟 10分钟 logstore 查询Logstore的采集状态 最近600分钟 10分钟 logfile 查询日志文件的采集状态 最近600分钟 10分钟 history 查询Logstore或日志文件一段时间内的采集状态 最近600分钟 10分钟 说明 命令中的index参数代表查询的时间窗口索引值,有效值为1~60,从当前时间开始计算。若统计窗口是1分钟,则查询距当前(index, index-1]分钟内的窗口;若统计窗口是10分钟,则查询距当前(10index, 10(index-1)]分钟内的统计窗口 所有查询命令均属于status子命令,因此主命令为status。 all命令 命令格式 /etc/init.d/ilogtaild status all [ index ] 说明 all命令用来查看Logtail的运行状态。index为可选参数,不输入时默认代表1。 示例 /etc/init.d/ilogtaild status all 1 ok /etc/init.d/ilogtaild status all 10 busy 输出信息描述 项目 描述 紧急度 解决方法 ok 当前状态正常。 无 无需处理。 busy 当前采集速度较高,Logtail状态正常。 无 无需处理。 many_log_files 当前正在采集的日志数较多。 低 检查配置中是否包含无需采集的文件。 process_block 当前日志解析出现阻塞。 低 检查日志产生速度是否过高,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。 send_block 当前发送出现阻塞。 较高 检查日志产生速度是否过高以及网络状态是否正常,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。 send_error 日志数据上传失败。 高 参考诊断采集错误解决。 active命令 命令格式 /etc/init.d/ilogtaild status active [--logstore] index /etc/init.d/ilogtaild status active --logfile index project-name logstore-name 说明 命令active [--logstore] index用来查看当前活跃的Logstore,--logstore参数可以省略,命令含义不变。 命令active --logfile index project-name logstore-name用来查看某Project中Logstore下的所有活跃日志文件。 active命令用来逐级查看活跃的日志文件。建议您先定位当前活跃的Logstore,再定向查询该Logstore下的活跃日志文件。 示例 /etc/init.d/ilogtaild status active 1 sls-zc-test : release-test sls-zc-test : release-test-ant-rpc-3 sls-zc-test : release-test-same-regex-3 /etc/init.d/ilogtaild status active --logfile 1 sls-zc-test release-test /disk2/test/normal/access.log 输出信息描述 执行命令active --logstore index,则以project-name : logstore-name形式输出当前所有活跃Logstore;若执行命令active --logfile index project-name logstore-name,则输出活跃日志文件的完整路径。 若Logstore或日志文件在查询窗口期内没有日志采集活动,则不会出现在active命令的输出信息中。 logstore命令 命令格式 /etc/init.d/ilogtaild status logstore [--format={line|json}] index project-name logstore-name 说明 命令logstore指定以line或json形式输出指定Project和Logstore的采集状态。 如果不配置--format=参数,则默认选择--format=line,按照line形式输出回显信息。注意:--format参数需位于logstore之后。 若无该Logstore或该Logstore在当前查询窗口期没有日志采集活动,则line形式输出为空,json下为null。 示例 /etc/init.d/ilogtaild status logstore 1 sls-zc-test release-test-same time_begin_readable : 17-08-29 10:56:11 time_end_readable : 17-08-29 11:06:11 time_begin : 1503975371 time_end : 1503975971 project : sls-zc-test logstore : release-test-same status : ok config : ##1.0##sls-zc-test$same read_bytes : 65033430 parse_success_lines : 230615 parse_fail_lines : 0 last_read_time : 1503975970 read_count : 687 avg_delay_bytes : 0 max_unsend_time : 0 min_unsend_time : 0 max_send_success_time : 1503975968 send_queue_size : 0 send_network_error_count : 0 send_network_quota_count : 0 send_network_discard_count : 0 send_success_count : 302 send_block_flag : false sender_valid_flag : true /etc/init.d/ilogtaild status logstore --format=json 1 sls-zc-test release-test-same { "avg_delay_bytes" : 0, "config" : "##1.0##sls-zc-test$same", "last_read_time" : 1503975970, "logstore" : "release-test-same", "max_send_success_time" : 1503975968, "max_unsend_time" : 0, "min_unsend_time" : 0, "parse_fail_lines" : 0, "parse_success_lines" : 230615, "project" : "sls-zc-test", "read_bytes" : 65033430, "read_count" : 687, "send_block_flag" : false, "send_network_discard_count" : 0, "send_network_error_count" : 0, "send_network_quota_count" : 0, "send_queue_size" : 0, "send_success_count" : 302, "sender_valid_flag" : true, "status" : "ok", "time_begin" : 1503975371, "time_begin_readable" : "17-08-29 10:56:11", "time_end" : 1503975971, "time_end_readable" : "17-08-29 11:06:11" } 输出信息描述 关键字 含义 单位 status 该Logstore整体状态。具体状态、含义以及修改方式见下表。 无 time_begin_readable 可读的开始时间。 无 time_end_readable 可读的截止时间。 无 time_begin 统计开始时间。 Unix时间戳,秒 time_end 统计结束时间。 Unix时间戳,秒 project Project名。 无 logstore Logstore名。 无 config 采集配置名(由##1.0## + project + $ + config组成的全局唯一配置名)。 无 read_bytes 窗口内读取日志数。 字节 parse_success_lines 窗口内日志解析成功的行数。 行 parse_fail_lines 窗口内日志解析失败的行数。 行 last_read_time 窗口内最近的读取时间。 Unix时间戳,秒 read_count 窗口内日志读取次数。 次数 avg_delay_bytes 窗口内平均每次读取时当前偏移量与文件大小差值的平均值。 字节 max_unsend_time 窗口结束时发送队列中未发送数据包的最大时间,队列空时为0。 Unix时间戳,秒 min_unsend_time 窗口结束时发送队列中未发送数据包的最小时间,队列空时为0。 Unix时间戳,秒 max_send_success_time 窗口内发送成功数据的最大时间。 Unix时间戳,秒 send_queue_size 窗口结束时当前发送队列中未发送数据包数。 个 send_network_error_count 窗口内因网络错误导致发送失败的数据包个数。 个 send_network_quota_count 窗口内因quota超限导致发送失败的数据包个数。 个 send_network_discard_count 窗口内因数据异常或无权限导致丢弃数据包的个数。 个 send_success_count 窗口内发送成功的数据包个数。 个 send_block_flag 窗口结束时发送队列是否阻塞。 无 sender_valid_flag 窗口结束时该Logstore的发送标志位是否有效,true代表正常,false代表可能因为网络错误或quota错误而被禁用。 无 Logstore状态列表 状态 含义 处理方式 ok 状态正常 无需处理。 process_block 日志解析阻塞 检查日志产生速度是否过高,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。 parse_fail 日志解析失败 检查日志格式与日志采集配置是否一致。 send_block 当前发送出现阻塞 检查日志产生速度是否过高以及网络状态是否正常,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。 sender_invalid 日志数据发送异常 检查网络状态,若网络正常,参考诊断采集错误解决。 logfile命令 命令格式 /etc/init.d/ilogtaild status logfile [--format={line|json}] index project-name logstore-name fileFullPath 说明 logfile命令指定以line或json形式输出指定日志文件的采集状态。 如果不配置--format=参数,则默认选择--format=line,按照line形式输出回显信息。 若无该logfile或该logfile在当前查询窗口期没有日志采集活动,则line形式输出为空,json下为null。 --format参数需位于logfile之后。 filefullpath必须是全路径名。 示例 /etc/init.d/ilogtaild status logfile 1 sls-zc-test release-test-same /disk2/test/normal/access.log time_begin_readable : 17-08-29 11:16:11 time_end_readable : 17-08-29 11:26:11 time_begin : 1503976571 time_end : 1503977171 project : sls-zc-test logstore : release-test-same status : ok config : ##1.0##sls-zc-test$same file_path : /disk2/test/normal/access.log file_dev : 64800 file_inode : 22544456 file_size_bytes : 17154060 file_offset_bytes : 17154060 read_bytes : 65033430 parse_success_lines : 230615 parse_fail_lines : 0 last_read_time : 1503977170 read_count : 667 avg_delay_bytes : 0 /etc/init.d/ilogtaild status logfile --format=json 1 sls-zc-test release-test-same /disk2/test/normal/access.log { "avg_delay_bytes" : 0, "config" : "##1.0##sls-zc-test$same", "file_dev" : 64800, "file_inode" : 22544456, "file_path" : "/disk2/test/normal/access.log", "file_size_bytes" : 17154060, "last_read_time" : 1503977170, "logstore" : "release-test-same", "parse_fail_lines" : 0, "parse_success_lines" : 230615, "project" : "sls-zc-test", "read_bytes" : 65033430, "read_count" : 667, "read_offset_bytes" : 17154060, "status" : "ok", "time_begin" : 1503976571, "time_begin_readable" : "17-08-29 11:16:11", "time_end" : 1503977171, "time_end_readable" : "17-08-29 11:26:11" } 输出信息描述 关键字 含义 单位 status 该日志文件当前窗口期的采集状态,参见logstore命令的status。 无 time_begin_readable 可读的开始时间。 无 time_end_readable 可读的截止时间。 无 time_begin 统计开始时间。 Unix时间戳,秒 time_end 统计结束时间。 Unix时间戳,秒 project Project名。 无 logstore Logstore名。 无 file_path 该日志文件路径。 无 file_dev 该日志文件的device id。 无 file_inode 该日志文件的inode。 无 file_size_bytes 窗口内最近一次扫描到的该文件大小。 字节 read_offset_bytes 当前该文件解析偏移量。 字节 config 采集配置名(由##1.0## + project + $ + config组成的全局唯一配置名)。 无 read_bytes 窗口内读取日志数。 字节 parse_success_lines 窗口内日志解析成功的行数。 行 parse_fail_lines 窗口内日志解析失败的行数。 行 last_read_time 窗口内最近的读取时间。 Unix时间戳,秒 read_count 窗口内日志读取次数。 次数 avg_delay_bytes 窗口内平均每次读取时当前偏移量与文件大小差值的平均值。 字节 history命令 命令格式 /etc/init.d/ilogtaild status history beginIndex endIndex project-name logstore-name [fileFullPath] 说明 history命令用来查询Logstore或日志文件一段时间内的采集状态。 beginIndex、endIndex分别为代码查询窗口索引的起始值和终止值,需确保beginIndex <= endIndex。 若参数中不输入fileFullPath,则代码查询Logstore的采集信息;否则查询日志文件的采集信息。 示例 /etc/init.d/ilogtaild status history 1 3 sls-zc-test release-test-same /disk2/test/normal/access.log begin_time status read parse_success parse_fail last_read_time read_count avg_delay device inode file_size read_offset 17-08-29 11:26:11 ok 62.12MB 231000 0 17-08-29 11:36:11 671 0B 64800 22544459 18.22MB 18.22MB 17-08-29 11:16:11 ok 62.02MB 230615 0 17-08-29 11:26:10 667 0B 64800 22544456 16.36MB 16.36MB 17-08-29 11:06:11 ok 62.12MB 231000 0 17-08-29 11:16:11 687 0B 64800 22544452 14.46MB 14.46MB $/etc/init.d/ilogtaild status history 2 5 sls-zc-test release-test-same begin_time status read parse_success parse_fail last_read_time read_count avg_delay send_queue network_error quota_error discard_error send_success send_block send_valid max_unsend min_unsend max_send_success 17-08-29 11:16:11 ok 62.02MB 230615 0 17-08-29 11:26:10 667 0B 0 0 0 0 300 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 11:26:08 17-08-29 11:06:11 ok 62.12MB 231000 0 17-08-29 11:16:11 687 0B 0 0 0 0 303 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 11:16:10 17-08-29 10:56:11 ok 62.02MB 230615 0 17-08-29 11:06:10 687 0B 0 0 0 0 302 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 11:06:08 17-08-29 10:46:11 ok 62.12MB 231000 0 17-08-29 10:56:11 692 0B 0 0 0 0 302 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 10:56:10 输出信息描述 该命令以列表形式输出Logstore或日志文件的历史采集信息,每个窗口期一行。 输出字段含义请参见logstore和logfile命令。 命令返回值 正常返回值 所有命令输入有效情况下返回值为0(包括无法查询到Logstore或日志文件),例如: /etc/init.d/ilogtaild status logfile --format=json 1 error-project error-logstore /no/this/file null echo $? 0 /etc/init.d/ilogtaild status all ok echo $? 0 异常返回值 返回值非0时,说明发生异常,请参考以下信息。 返回值 类型 输出 问题排查 10 无效命令或缺少参数 invalid param, use -h for help. 输入-h查看帮助。 1 查询超过1-60的时间窗口 invalid query interval 输出-h查看帮助。 1 无法查询到指定时间窗口 query fail, error: $(error),具体参见errno释义 可能原因是logtail启动时间小于查询时间跨度,其他情况请提交工单处理。 1 查询窗口时间不匹配 no match time interval, please check logtail status 检查Logtail是否在运行,其他情况请提交工单处理。 1 查询窗口内没有数据 invalid profile, maybe logtail restart 检查Logtail是否在运行,其他情况请提交工单处理。 示例 /etc/init.d/ilogtaild status nothiscmd invalid param, use -h for help. echo $? 10 /etc/init.d/ilogtaild status/all 99 invalid query interval echo $? 1 功能使用场景示例 通过Logtail健康度查询可以获取Logtail当前整体状态;通过采集进度查询可以获取采集过程中的相关指标信息。用户可根据获取的这些信息实现自定义的日志采集监控。 监控Logtail运行状态 通过all命令实现Logtail运行状态监控。 实现方式:每隔一分钟定期查询Logtail当前状态,若连续5分钟状态处于process_block、send_block、send_error则触发报警。 具体报警持续时间以及监控的状态范围可根据具体场景中日志采集重要程度调整。 监控日志采集进度 通过logstore命令实现具体日志库采集进度监控。 实现方式:定期每隔10分钟调用logstore命令获取该logstore的状态信息,若avg_delay_bytes超过1MB(1024*1024)或status不为ok则触发报警。 具体avg_delay_bytes报警阈值可根据日志采集流量调整。 判断日志文件是否采集完毕 通过logfile命令判断日志文件是否采集完毕。 实现方式:日志文件已经停止写入后,定期每隔10分钟调用logfile命令获取该文件的状态信息,若该文件read_offset_bytes与file_size_bytes一致,则该日志文件已经采集完毕。 日志采集问题排查 若发现某台服务器日志采集进度延迟,可用history命令查询该服务器上相关的采集信息。 send_block_flag为true,则说明日志采集进度延迟block在网络部分。 若send_network_quota_count大于0时,需要对Logstore的Shard进行分裂。 若send_network_error_count大于0时,需要检查网络连通性。 若无相关network error,则需要调整Logtail的发送并发以及流量限制。 发送部分相关参数正常但avg_delay_bytes较高。 可根据read_bytes计算出日志平均解析速度,判断日志产生流量是否异常。 可适当调整logtail的资源使用限制。 parse_fail_lines大于0。 检查日志采集解析配置是否能够匹配所有日志。

保持可爱mmm 2020-03-26 23:03:23 0 浏览量 回答数 0

回答

干嘛不用@ResponseBody 然后直接return user呢? ######我是被逼的……######回复 @郏高阳 : 多此一举啊######我不想用这样的方式###### 引用来自“throwable”的答案 干嘛不用@ResponseBody 然后直接return user呢? +1 ###### @RequestMapping("yourFun") @ResponseBody public String yourFun() { return "{'a':1}"; } ######这种方法不行 中文会乱码###### 最简单的直接用 @ResponseBody返回。 其二我经常使用的多视图,代码如下: JsonView.java package com.szfore.springmvc; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.util.CollectionUtils; import org.springframework.validation.BindingResult; import org.springframework.web.servlet.view.AbstractView; import com.google.gson.Gson; /** * <b>function:</b>扩展AbstractView 实现JSON-lib视图 * @author hoojo * @createDate 2011-4-28 下午05:26:43 * @file MappingJsonlibVeiw.java * @package com.hoo.veiw.xml * @project SpringMVC4View * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class JsonView extends AbstractView { public static final String DEFAULT_CONTENT_TYPE = "application/json"; public static final String HTML_CONTENT_TYPE = "text/html"; public static final String DEFAULT_CHAR_ENCODING = "UTF-8"; private String encodeing = DEFAULT_CHAR_ENCODING; private Object jsonData = null; private Map<String, Object> _jsonDataMap = new HashMap<String, Object>(); public void setEncodeing(String encodeing) { this.encodeing = encodeing; } private Set<String> renderedAttributes; public JsonView() { setContentType(DEFAULT_CONTENT_TYPE); } public JsonView(Object data) { setContentType(DEFAULT_CONTENT_TYPE); this.jsonData =data; } @Override protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setCharacterEncoding(encodeing); response.setContentType(getContentType()); PrintWriter out = response.getWriter(); if(jsonData != null){ out.print(new Gson().toJson(jsonData)); }else if(!_jsonDataMap.isEmpty()){ out.print(new Gson().toJson(_jsonDataMap)); }else { model = filterModel(model); out.print(new Gson().toJson(model)); } } /** * Filters out undesired attributes from the given model. * <p>Default implementation removes {@link BindingResult} instances and entries not included in the {@link * #setRenderedAttributes(Set) renderedAttributes} property. */ protected Map<String, Object> filterModel(Map<String, Object> model) { Map<String, Object> result = new HashMap<String, Object>(model.size()); Set<String> renderedAttributes = !CollectionUtils.isEmpty(this.renderedAttributes) ? this.renderedAttributes : model.keySet(); for (Map.Entry<String, Object> entry : model.entrySet()) { if (!(entry.getValue() instanceof BindingResult) && renderedAttributes.contains(entry.getKey())) { result.put(entry.getKey(), entry.getValue()); } } return result; } public void setJsonData(Object jsonData){ this.jsonData = jsonData; } public static JsonView returnJson(Object jsonData){ JsonView jsonView = new JsonView(); jsonView.setJsonData(jsonData); return jsonView; } public JsonView put(String key, Object value) { _jsonDataMap.put(key, value); return this; } } MultiViewResover.java package com.szfore.springmvc; import java.util.Locale; import java.util.Map; import org.springframework.web.servlet.View; import org.springframework.web.servlet.ViewResolver; /** * @author Jeson * @blog:http://www.gbsou.com * @date:Oct 20, 2009 8:39:27 AM * @version :1.0 * */ public class MultiViewResover implements ViewResolver { private Map<String, ViewResolver> resolvers; private final static String DEFAULT_RESOLVER = "jsp"; private final static String JSON_RESOLVER = "json"; private final static String JSON_VIEW_NAME = "jsonView"; /* * 自定义resolve类默认为jsp视图,其余视图用下划线分隔 */ @Override public View resolveViewName(String viewName, Locale locale) throws Exception { //判断是否为json String tmpViewName = viewName.trim().toLowerCase(); if(JSON_RESOLVER.equals(tmpViewName)){ ViewResolver resolver = resolvers.get(JSON_RESOLVER); return resolver.resolveViewName(JSON_VIEW_NAME, locale); } //若无下划线,默认转向jsp视图 int n = viewName.lastIndexOf("_"); if (n == (-1)){ ViewResolver resolver = resolvers.get(DEFAULT_RESOLVER); return resolver.resolveViewName(viewName, locale); } //有的话截取下划线后面的字符串 这里一般是jsp,ftl,vm与配置文件中的<entry key="ftl">的key匹配 String suffix = viewName.substring(n + 1); // 根据下划线后面的字符串去获取托管的视图解析类对象 ViewResolver resolver = resolvers.get(suffix); // 取下划线前面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是hello_jsp viewName = viewName.substring(0, n); if (resolver != null){ return resolver.resolveViewName(viewName, locale); } return null; } public Map<String, ViewResolver> getResolvers() { return resolvers; } public void setResolvers(Map<String, ViewResolver> resolvers) { this.resolvers = resolvers; } } xml配置 <!-- 多视图 --> <bean name="jsonView" class="com.szfore.springmvc.JsonView"> </bean> <bean id="viewResolver" class="com.szfore.springmvc.MultiViewResover"> <property name="resolvers"> <map> <entry key="jsp"> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/" /> <property name="suffix" value=".jsp" /> </bean> </entry> <entry key="json"> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> </bean> </entry> </map> </property> </bean> 使用方法: @RequestMapping("/test") public JsonView test(){ return new JsonView(new User()); } ######支持一楼######是不是想这样用?找我呗 @RequestMapping(value="/user", method=RequestMethod.GET) public String getUser() { User user = new User(); user.setUserName("userName"); user.setPassword("password"); user.setAge(22); user.setSex("男"); user.setBirthday("2013-11-11"); return "json:" + JSONUtils.jsonSucess(user); } ###### @郏高阳 这样用的目的就是返回JSONObject######我还是返回JSONObject

爱吃鱼的程序员 2020-05-30 22:43:36 0 浏览量 回答数 0

回答

点一下,把a标签替换掉,返回结果,再把a标签弄回来######好的,谢谢!试试看,应该可以######ajax abort###### 定义一个变量 var a=0; 点击后 a=1,返回结果后再 a=0 点击时判断 a==0 时才请求 ###### 高并发都不好使 ######为啥不从业务方面想想,这个链接是否有必点的需求,从你的URL名称看的话就是获取一段JSON这个功能是否需要由人工的来点击触发我觉的可以考虑一下,有时候其实可以是使用业务来弥补技术的!######业务上已经存在了,改不动了###### 这个很容易吧,启动session, 设置标志,如果标志存在 那么立刻退出。 如果是一次性的任务,那么设置cookie.检测到cookie立刻退出 ###### 引用来自“你要爪子”的答案 点一下,把a标签替换掉,返回结果,再把a标签弄回来 常用的做法是点了之后换成一张表示loading中的gif图片 ###### 这个异步处理不好使,你又要求一个结果同步的啊 ###### Token######点击=》改变a=》ajax成功=>改回来

kun坤 2020-05-29 11:35:53 0 浏览量 回答数 0

问题

最全Android开发常用工具类 热:报错

kun坤 2020-06-06 16:33:25 0 浏览量 回答数 1

回答

常见错误处理 错误码 处理方式 1000 一般为语法或者超时引起,如果多次刷新不再出现,则是超时引起,如果仍出现,则语法有问题,请对照文档仔细检查,如分隔符、函数字段类型等 2112 排序表达式中的text_relevance(field)、fieldterm_proximity(field)等文本feature中的field必须在查询的索引包含的源字段中,否则会报错,但不影响搜索结果。 3007 对于API推送系统是有频率限制,请控制好频率重试 4003 可以先按照文档样例,试下签名结果是否一致,判断是否是签名算法问题。如果不是,请检查下参数按照字典序排序后应该是公共参数(大写字母)在前,请求参数(小写字母)在后。另外还有空格等一些编码规则,具体参考授权文档介绍 4007 一般Json字段内容中包含双引号或者不可见字符会导致格式解析失败,请转义或者过滤后重试 4010 TimeStamp参数是有过期时间的,请按照要求格式取当前时间来计算 5001 没有找到对应的用户,一般为ACCESSKEY信息不正确,或者使用区域域名错误(API域名请以应用管理-》基本信息-》API入口为准),请检查修改后重试 5008 服务内部是通过Accesskey来进行用户身份校验的,请确保AccessKey已经开启,您可以通过控制台AccessKey管理入口来创建和删除 6013 start+hit不能超过5000,否则会报错无结果。需要超过5000的请求,请查看下API文档中的SCROLL接口,看是否满足需求 6015 请及时到控制台配额管理处进行QPS峰值的调整,否则超过的请求会被丢弃 6127 除了query子句,其他子句出现的字段都必须配置为属性字段才能使用。请修改应用结构后重试 系统级别(1000-1999) 错误码 错误说明 1000 系统内部错误 1001 没有找到模版 1003 不支持的索引类型 1004 服务暂时不可用,请稍后再试 应用相关(2000-2999) 错误码 错误说明 2001 待查应用不存在 2002 应用已经存在 2003 到达创建应用总限制 2004 应用名不可用。应用名由数字、26个英文字母或下划线组成,长度不超过30位 2005 应用名称没有设定 2006 新应用名称没有设定 2007 备注不超300字 2008 摘要配置参数错误 2009 更新状态失败 2010 应用暂停中 2011 应用冻结中 2012 应用未开启 2013 删除失败,没有此应用 2014 文件上传失败 2016 区域信息没有 2017 此应用并不属于当前区域 2099 当前接口暂时不提供服务。 2101 表达式不存在 2102 表达式名称被占用 2103 到达该应用表达式总数限制 2104 表达式名不可用。表达式名由数字、26个英文字母或下划线组成,长度不超过30位 2105 表达式名称没有设定 2106 新表达式名称没有设定 2107 表达式备注不超过300字 2108 表达式备注格式错误 2109 表达式格式错误 2110 表达式长度超过限制 2111 表达式id未指定 2112 表达式错误 2113 表达式不能为空 2114 操作错误 2201 粗排配置名没有设定 2202 粗排配置名已经存在 2203 粗排配置个数超出限制 2204 粗排配置名错误。只能由数字、26个英文字母或下划线组成 2205 粗排配置名长度超出限制 2206 粗排字段必须是数值型 2207 粗排配置不存在 2208 粗排配置错误,必须包含字段 2209 粗排配置权重错误,必须是-100000到100000之间的非0数值,浮点数精度支持6位 2210 与系统默认粗排配置重名 2211 timeliness()的参数必须是INT类型 2112 排序表达式错误 2551 查询指定的下拉提示规则不存在 文档相关(3000-3999) 错误码 错误说明 3001 文档不能为空 3002 文档大小超过限制 3003 已经到最大文档数 3004 保存文档失败 3005 doc格式错误 3006 文档操作cmd不合法 3007 请求过于频繁 3008 文档总长度太长 3009 没有文档id 3011 在配置RDS或MYSQL数据源后,不支持API推送文档 3012 未找到指定资源 3013 文档推送速率超过应用配额 3014 文档推送速率触发系统限制 3015 单次推送文档个数超过系统限制 3016 文档总数超过应用配额 授权相关(4000-4999) 错误码 错误说明 4001 认证失败 4002 需要设置签名 4003 签名验证失败 4004 需要设置SignatureNonce 4005 SignatureNonce不能重复使用 4006 SignatureNonce验证失败 4007 解析JSON格式失败 4008 用户名称不能为空,请检查域名正确性 4009 需要指定用户标识 4010 时间过期 4011 demo帐号禁止执行的操作 4012 数据表不存在 4013 Timestamp格式错误 4014 需要设置Timestamp 4020 RAM子账户鉴权失败 用户相关(5000-5999) 错误码 错误说明 5001 用户不存在 5002 用户名不正确 5003 需要用户登录 5005 用户未开通OpenSearch服务,请前往阿里云官网开通 5008 用户没有启用ACCESSKEY 5100 用户没有此区域的操作权限 5004 用户未缴费 5005 用户未开通OpenSearch服务,请前往阿里云官网开通 5006 欠费冻结中 5008 用户没有启用ACCESSKEY 5009 用户已经删除 5010 ACCESSKEY 已经禁用 5011 通过邮箱获取到多个用户 5012 CODE_USER_ALIYUN_USER_ID_INVALID,错误信息为空 5013 CODE_USER_ALIYUN_BID_INVALID,错误信息为空 5014 CODE_USER_CLIENT_ID_INVALID,错误信息为空 5015 CODE_USER_ID_INVALID,错误信息为空 5100 用户没有此区域的操作权限 搜索相关(6000-6999) 错误码 错误说明 6001 查询query为空 6002 并不被支持的搜索key关键字 6003 并不被支持的搜索field关键字 6004 复杂查询为空 6005 field无效 6006 请求包含太多应用名 6007 超出多索引查询每个模板中索引总数 6008 请求串语法错误,解析失败 6009 查询子句过长 6010 无效的rerank size 6011 SignatureNonce格式错误 6013 start+hit超过系统限制 6014 因系统繁忙,请求被丢弃 6015 因流量超出配额,请求被丢弃 6016 查询hit数超过系统限制 6017 目前scroll只支持search_type为scan,也就是说设置了参数scroll,就必须设置参数search_type=scan 6018 设置了scroll参数,但没有search_type参数 6019 传入的scroll_id参数解析失败 6020 无效的scroll参数值 6021 scroll请求不支持Aggregate/Sort/Distinct,当传入这些clause时,会报错 6022 scroll_id已经过期失效了 6100 查询词为空 6101 查询的索引字段不存在 6102 Query中的数值范围错误 6103 Filter中的表达式返回值必须为bool类型 6104 Sort中的表达式返回值不能为bool类型 6105 Sort中存在相同的表达式 6106 查询query语句非法 6107 统计函数表达式的返回值不能为bool或者string类型 6108 统计中的范围必须为升序 6109 统计中的范围表达式返回值类型错误 6110 统计函数不存在 6111 不支持的统计函数 6112 Query 子句错误 6113 Filter子句错误 6114 Aggregate子句错误 6115 Sort子句错误 6116 Distinct子句错误 6117 查询中包含未知的子句 6118 语法错误 6119 Distinct子句中的dist_count值错误,应该为大于0的整数 6120 Distinct子句中的dist_times值错误,应该为大于0的整数 6121 Distinct子句中的reserved值错误,应为true/false 6122 Distinct子句缺少distinct_key 6123 Distinct子句中的grade值错误,例如为空,或非数值 6124 Distinct子句中包含distinct个数不对,个数应在(0,2] 6125 Distinct子句中的max_item_count值错误,应该为大于0的整数 6126 Distinct子句中的update_total_hit值错误,应为true/false 6127 请求中包含了未定义的attribute字段 6128 表达式中的二元操作符的两边的表达式结果类型不匹配 6129 表达式中的二元操作符的两边表达式不能同时为常量 6130 二元逻辑运算表达式类型错误,应为bool类型 6131 二元表达式中不支持string类型 6132 二元表达式中不支持数组类型 6133 位操作中的类型错误 6134 常量表达式的返回值类型错误 6300 常量表达式类型应是整数或浮点数 6301 位取反操作数类型必须为整数 6302 取负数操作数必须为数值 6303 逻辑非操作数必须为数值 6304 二元运算操作数类型错误 6305 非法的二元运算符 6306 函数参数类型错误 6307 函数未定义 6308 函数参数个数错误 6309 非法的数组操作 6310 可过滤字段不存在 6311 数组字段被错当作单值使用 6312 单值字段被错当作数组使用 6313 数组字段下标越界(小于0) 6314 不支持的字段类型 6315 索引字段参数不存在 6316 Query中没有指定索引 6317 Filter子句中只能使用一次公式 6318 公式语法解析出错 6500 搜索语法中包含不存在的字段 6501 在线系统没有索引数据 6502 用户query语法错误 6601 一个索引字段只能包含在一个规则中 6602 没有查询词,如default:’’的情况 6603 查询中的索引字段没有在查询分析规则中指定 6604 关键词没有使用引号括起来,如default:xxx,正确为default:’xxx’ 6605 双引号查询不能配置查询分析规则 6607 disable参数格式错误 6608 disable指定关闭的索引字段不存在 6609 disable指定关闭的功能列表不存在 6610 查询分析后的query为空(原query为空,或者全部是stopword) 6611 查询中没有指定索引字段 数据处理相关(7000-7999) 错误码 错误说明 7100 没有错误发生 7101 单个文档过长 7102 文档所属应用的元信息错误(clientid 或 accesskey、应用名或表名等不正确) 7103 HA3 文档格式错误: 字段解析失败 7104 JSON文档格式错误:字段解析失败 7105 JSON 文档格式错误: json非法 7106 JSON 文档格式错误: json非法 7107 不支持的编码 7108 编码转换失败 7109 fields中没有id字段 7110 fields中id定义不合法 7111 fields中包含保留字段 7201 HA3 文档格式错误: cmd 非法(cmd 非 ADD/UPDATE/DELETE) 7202 JSON 文档格式错误: cmd 非法(cmd 非 ADD/UPDATE/DELETE) 7301 主键字段不存在 7302 字段数据类型错误 7303 数组字段相关错误 7401 文档总数超出配额 7402 每日更新文档数超出配额 7403 单次导入的数据大小超出配额 7500 系统内部错误 7501 云梯Hive待同步字段的列号超出了当前数据的列数范围 7502 从Mysql中读取到的主键字段为空,请联系数据库管理员 7503 JsonKeyValueExtractor内容转换错误: Json格式非法 7504 JsonKeyValueExtractor内容转换错误: key不存在 7505 TairLDBExtractor内容转换错误: namespace非法(应为int32类型) 7506 TairLDBExtractor内容转换错误: 从Tair中读取数据失败 7507 MySql实时同步过滤条件格式错误 7508 系统内部错误: 内容转换插件初始化失败 7509 TairLDBExtractor内容转换配置错误:Tair连接失败,请检查configId 或 namespace 是否有效 7510 KVExtractor内容解析错误:KV格式无法解析 7511 OSS 数据读取失败 7512 OSS 内容长度超过限度 7513 OSS 内容解析错误 7514 系统内部错误: OSS LOG 格式不兼容 7515 过滤条件执行错误 7516 字段映射过程中源表字段缺失 7517 StringCatenateExtractor内容转换错误: 源字段不存在 7518 StringCatenateExtractor内容转换错误: 不支持多值字段 7601 任务执行错误 7602 更新app失败 7701 数据清理任务错误:指定过滤字段不存在 7801 文档格式错误 文档错误内部通知(8000-8999) 错误码 错误说明 8001 保存错误信息失败 8002 必要参数缺失 8003 应用不存在 8004 参数错误 模板相关(9000-9999) 错误码 错误说明 9001 用户名为空 9002 应用名为空 9003 模板名不可用。模板名只能由数字、26个英文字母或下划线组成 9004 模板名长度不可超过30位 9005 查询模板信息出错 9006 模板名字已存在 9007 插入模板信息出错 9008 无效的数据 9009 定义的字段数目超过系统允许的最大字段数 9010 此字段保留字段名 9011 字段已存在 9012 索引名称必须以字母开头,由数字、26个英文字母或下划线组成,长度不超过30位,多值字段类型不能为SWS_TEXT或TEXT 9013 不支持数组 9014 不支持主键 9015 未设定主键 9016 主键不唯一 9017 更新信息失败 9018 删除信息失败 9019 包含多个索引字段的搜索字段最多4个 9020 同一个STRING/TEXT类型的索引字段不能进入多个只包含一个字段的搜索字段中 9021 索引名称必须以字母开头,由数字、26个英文字母或下划线组成,长度不超过30个 9022 该表已经关联 9023 索引名不能包含多类型的字段 9100 系统内部错误 9101 该字段超过数量限制 9102 该数据源未被用到 9103 无效的外表连接 9104 最多2级关联 9105 待查模板不存在 9501 用户名为空 9502 应用名为空 9519 未指定模板 9600 系统内部错误 9902 插件字段类型错误 9999 此域名不提供本服务 数据同步相关(10000-) 错误码 错误说明 10001 没有指定的tddl group key,tddl信息获取失败 10002 获取字段失败或者表不存在 10011 连接agg失败 10012 应用里存在doc 10013 应用不是自定义结构 10110 该任务已结束 10010 部分数据源有问题,已经忽略有错误的数据 10014 数据源类型错误 10100 创建任务失败,未结束的任务已经存在 10101 没有指定应用ID 10106 没有指定应用ID 10107 没有指定应用ID 10102 ACTION无效 10112 文档数量超过限制 10201 获取配额列表失败 10202 更新配额失败 10301 参数错误:参数未提供或者格式不正确 10302 时间参数错误 10303 数据源未配置 10304 该表配额超限 10305 OSS参数错误 10306 OSS BUCKET名称无效 10307 OSS 记录类型无效 10308 OSS BUCKET日志功能未开启 10309 存在未完成的任务 10310 不是运行中的应用,无法创建任务 10311 时间范围不合法 10312 应用描述长度超过限制,最多600字 10313 OSS 内容格式不合法 10314 OSS BUCKET所在区域ACL网络不通 10315 OSS BUCKET的地址信息不合法 10330 数据源参数不合法 10350 连接ODPS服务失败 10351 ODPS 返回错误 10400 OSS前缀不合法 10450 字段不存在

保持可爱mmm 2020-03-26 22:06:37 0 浏览量 回答数 0

问题

码栈解析JSON字符串的方法

水晶心泉 2019-12-01 21:15:25 3109 浏览量 回答数 0

回答

干嘛不用@ResponseBody 然后直接returnuser呢?######我是被逼的……######回复 @郏高阳:多此一举啊######我不想用这样的方式###### 引用来自“throwable”的答案 干嘛不用@ResponseBody 然后直接returnuser呢? +1###### @RequestMapping("yourFun")@ResponseBodypublicStringyourFun(){return"{'a':1}";} ######这种方法不行中文会乱码###### 最简单的直接用 @ResponseBody返回。其二我经常使用的多视图,代码如下:JsonView.java packagecom.szfore.springmvc;importjava.io.PrintWriter;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.springframework.util.CollectionUtils;importorg.springframework.validation.BindingResult;importorg.springframework.web.servlet.view.AbstractView;importcom.google.gson.Gson;/***<b>function:</b>扩展AbstractView实现JSON-lib视图*@authorhoojo*@createDate2011-4-28下午05:26:43*@fileMappingJsonlibVeiw.java*@packagecom.hoo.veiw.xml*@projectSpringMVC4View*@bloghttp://blog.csdn.net/IBM_hoojo*@emailhoojo_@126.com*@version1.0*/publicclassJsonViewextendsAbstractView{publicstaticfinalStringDEFAULT_CONTENT_TYPE="application/json";publicstaticfinalStringHTML_CONTENT_TYPE="text/html";publicstaticfinalStringDEFAULT_CHAR_ENCODING="UTF-8";privateStringencodeing=DEFAULT_CHAR_ENCODING;privateObjectjsonData=null;privateMap<String,Object>_jsonDataMap=newHashMap<String,Object>();publicvoidsetEncodeing(Stringencodeing){this.encodeing=encodeing;}privateSet<String>renderedAttributes;publicJsonView(){setContentType(DEFAULT_CONTENT_TYPE);}publicJsonView(Objectdata){setContentType(DEFAULT_CONTENT_TYPE);this.jsonData=data;}@OverrideprotectedvoidrenderMergedOutputModel(Map<String,Object>model,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{response.setCharacterEncoding(encodeing);response.setContentType(getContentType());PrintWriterout=response.getWriter();if(jsonData!=null){out.print(newGson().toJson(jsonData));}elseif(!_jsonDataMap.isEmpty()){out.print(newGson().toJson(_jsonDataMap));}else{model=filterModel(model);out.print(newGson().toJson(model));}}/***Filtersoutundesiredattributesfromthegivenmodel.*<p>Defaultimplementationremoves{@linkBindingResult}instancesandentriesnotincludedinthe{@link*#setRenderedAttributes(Set)renderedAttributes}property.*/protectedMap<String,Object>filterModel(Map<String,Object>model){Map<String,Object>result=newHashMap<String,Object>(model.size());Set<String>renderedAttributes=!CollectionUtils.isEmpty(this.renderedAttributes)?this.renderedAttributes:model.keySet();for(Map.Entry<String,Object>entry:model.entrySet()){if(!(entry.getValue()instanceofBindingResult)&&renderedAttributes.contains(entry.getKey())){result.put(entry.getKey(),entry.getValue());}}returnresult;}publicvoidsetJsonData(ObjectjsonData){this.jsonData=jsonData;}publicstaticJsonViewreturnJson(ObjectjsonData){JsonViewjsonView=newJsonView();jsonView.setJsonData(jsonData);returnjsonView;}publicJsonViewput(Stringkey,Objectvalue){_jsonDataMap.put(key,value);returnthis;}}MultiViewResover.java packagecom.szfore.springmvc;importjava.util.Locale;importjava.util.Map;importorg.springframework.web.servlet.View;importorg.springframework.web.servlet.ViewResolver;/***@authorJeson*@blog:http://www.gbsou.com*@date:Oct20,20098:39:27AM*@version:1.0**/publicclassMultiViewResoverimplementsViewResolver{privateMap<String,ViewResolver>resolvers;privatefinalstaticStringDEFAULT_RESOLVER="jsp";privatefinalstaticStringJSON_RESOLVER="json";privatefinalstaticStringJSON_VIEW_NAME="jsonView";/**自定义resolve类默认为jsp视图,其余视图用下划线分隔*/@OverridepublicViewresolveViewName(StringviewName,Localelocale)throwsException{//判断是否为jsonStringtmpViewName=viewName.trim().toLowerCase();if(JSON_RESOLVER.equals(tmpViewName)){ViewResolverresolver=resolvers.get(JSON_RESOLVER);returnresolver.resolveViewName(JSON_VIEW_NAME,locale);}//若无下划线,默认转向jsp视图intn=viewName.lastIndexOf("_");if(n==(-1)){ViewResolverresolver=resolvers.get(DEFAULT_RESOLVER);returnresolver.resolveViewName(viewName,locale);}//有的话截取下划线后面的字符串这里一般是jsp,ftl,vm与配置文件中的<entrykey="ftl">的key匹配Stringsuffix=viewName.substring(n+1);//根据下划线后面的字符串去获取托管的视图解析类对象ViewResolverresolver=resolvers.get(suffix);//取下划线前面的部分那时真正的资源名.比如我们要使用hello.jsp那viewName就应该是hello_jspviewName=viewName.substring(0,n);if(resolver!=null){returnresolver.resolveViewName(viewName,locale);}returnnull;}publicMap<String,ViewResolver>getResolvers(){returnresolvers;}publicvoidsetResolvers(Map<String,ViewResolver>resolvers){this.resolvers=resolvers;}}xml配置 <!--多视图--><beanname="jsonView"class="com.szfore.springmvc.JsonView"></bean><beanid="viewResolver"class="com.szfore.springmvc.MultiViewResover"><propertyname="resolvers"><map><entrykey="jsp"><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/"/><propertyname="suffix"value=".jsp"/></bean></entry><entrykey="json"><beanclass="org.springframework.web.servlet.view.BeanNameViewResolver"></bean></entry></map></property></bean>使用方法: @RequestMapping("/test")publicJsonViewtest(){returnnewJsonView(newUser());} ######支持一楼######是不是想这样用?找我呗 @RequestMapping(value="/user",method=RequestMethod.GET)publicStringgetUser(){Useruser=newUser();user.setUserName("userName");user.setPassword("password");user.setAge(22);user.setSex("男");user.setBirthday("2013-11-11");return"json:"+JSONUtils.jsonSucess(user);} ###### @郏高阳这样用的目的就是返回JSONObject######我还是返回JSONObject

优选2 2020-06-09 16:13:14 0 浏览量 回答数 0

问题

V3(标准/高级)的错误码如何处理?

轩墨 2019-12-01 20:57:18 1046 浏览量 回答数 0

问题

android关于json实现网上数据本地存储? 400 报错

爱吃鱼的程序员 2020-05-31 00:17:27 0 浏览量 回答数 1

回答

调用CreateTemplate创建一个模版。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Content String 是 {“FormatVersion”: “OOS-2019-06-01”, “Description”: “Describe instances of given status”, “Parameters”: {“Status”: {“Type”: “String”, “Description”: “(Required) The status of the Ecs instance.”}}, “Tasks”: [{“Properties”: {“Parameters”: {“Status”: “{{ Status }}”}, “API”: “DescribeInstances”, “Service”: “Ecs”}, “Name”: “foo”, “Action”: “ACS::ExecuteApi”}]} 模板内容。JSON或YAML格式,长度限制为 64 KB。 TemplateName String 是 MyTemplate 模板名称。内容限制为字母、数字、中划线、下划线,长度200字符,且不能以ALIYUN、ACS、ALIBABA、ALICLOUD开头。 RegionId String 否 cn-hangzhou 地域ID Tags Map 否 {“k1”:”v1”,”k2”:”v2”} 标签键和值映射, 标签键值对数量范围是1至20。 返回数据 名称 类型 示例值 描述 RequestId String 20758A-585D-4A41-A9B2-28DA8F4F534F 请求ID Template 模板元信息 CreatedBy String root(13090000) 模板创建者 CreatedDate String 2019-05-16T10:26:14Z 模板创建时间 Description String Describe instances of given status 模板说明 HasTrigger Boolean true 是否成功触发 Hash String 4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4 模板内容的SHA256 ShareType String Private 模板共享类型。目前用户创建的模板的共享类型均为 Private。 Tags Map { “k1”:”v1”, “k2”:”v2” } 该资源对应标签键值的映射 TemplateFormat String JSON 模板格式。系统字段判断,为JSON或YAML。 TemplateId String t-94753d38 模板ID TemplateName String MyTemplate 模板名称 TemplateVersion String v1 模板版本。以“v”+数字的形式,数字从1开始。 UpdatedBy String root(130900000) 模板更新者 UpdatedDate String 2019-05-16T10:26:14Z 模板更新时间 示例 请求示例 http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=CreateTemplate&Content={“FormatVersion”: “OOS-2019-06-01”, “Description”: “Describe instances of given status”, “Parameters”: {“Status”: {“Type”: “String”, “Description”: “(Required) The status of the Ecs instance.”}}, “Tasks”: [{“Properties”: {“Parameters”: {“Status”: “{{ Status }}”}, “API”: “DescribeInstances”, “Service”: “Ecs”}, “Name”: “foo”, “Action”: “ACS::ExecuteApi”}]}&TemplateName=MyTemplate&<公共请求参数> 正常返回示例 XML 格式 20758A-585D-4A41-A9B2-28DA8F4F534F root(130900000) 2019-05-27T08:46:33Z root(1309000000) 2019-05-27T08:46:33Z Describe instances of given status 4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4 Private v1 v2 JSON MyTemplate t-94753eeaef8 v1 JSON 格式 { “RequestId”: “20758A-585D-4A41-A9B2-28DA8F4F534F”, “Template”: { “CreatedBy”: “root(130900000)”, “CreatedDate”: “2019-05-27T08:46:33Z”, “UpdatedBy”: “root(1309000000)”, “UpdatedDate”: “2019-05-27T08:46:33Z”, “Description”: “Describe instances of given status”, “Hash”: “4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4”, “ShareType”: “Private”, “Tags”: { “k1”: “v1”, “k2”: “v2” }, “TemplateFormat”: “JSON”, “TemplateName”: “MyTemplate”, “TemplateId”: “t-94753eeaef8”, “TemplateVersion”: “v1” } } 错误码 访问错误中心查看更多错误码。 </article> 调用DeleteTemplate删除一个模版。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 DeleteTemplate 系统规定参数。取值:DeleteTemplate。 TemplateName String 是 MyTemplate 模板名称。内容限制为字母、数字、中划线、下划线,长度200字符,且不能以ALIYUN、ACS、ALIBABA、ALICLOUD开头。 RegionId String 否 cn-hangzhou 地域ID 返回数据 名称 类型 示例值 描述 RequestId String 2075899A-585D-4A41-A9B2-28DA8534F 请求ID 示例 请求示例 http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=DeleteTemplate &TemplateName=MyTemplate &<公共请求参数> 正常返回示例 XML 格式 2075899A-585D-4A41-A9B2-28DA8534F JSON 格式 { "RequestId":"2075899A-585D-4A41-A9B2-28DA8534F" } 错误码 访问错误中心查看更多错误码。 调用GetTemplate获取一个模版,包括内容。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 GetTemplate 系统规定参数。取值:GetTemplate。 TemplateName String 是 MyTemplate 模板名称。内容限制为字母、数字、中划线、下划线,长度200字符。 RegionId String 否 cn-hangzhou 地域ID TemplateVersion String 否 v1 模板版本。格式:“v”+数字。取值范围:v1-v200。 返回数据 名称 类型 示例值 描述 Content String “{\n \”FormatVersion\”: \”OOS-2019-06-01\”,\n \”Parameters\”: {\n \”Status\”: {\n \”Type\”: \”String\”,\n \”Description\”: \”(Required) The ID of the ECS instance.\”\n }\n },\n \”Tasks\”: [\n {\n \”Name\”: \”bar\”,\n \”Properties\”: {\n \”Parameters\”: {\n \”Status\”: \”{{ Status }}\”\n },\n \”API\”: \”DescribeInstances\”,\n \”Service\”: \”Ecs\”\n },\n \”Action\”: \”acs::ExecuteAPI\”,\n \”Outputs\”: {\n \”InstanceIds\”: {\n \”ValueSelector\”: \”.Instances.Instance[].InstanceId\”,\n \”Type\”: \”List\”\n }\n }\n }\n ],\n \”Outputs\”: {\n \”InstanceIds\”: {\n \”Value\”: \” {{ bar.InstanceIds }} \”,\n \”Type\”: \”List\”\n }\n }\n}\n” 模板内容 RequestId String FAAFCA45-AB65-4049-BFE0-868E1C8025AF 请求ID Template 模板元信息 CreatedBy String root(1300000) 模板创建者 CreatedDate String 2019-05-16T10:26:14Z 模板创建时间 Description String Describe instances of given status 模板说明 HasTrigger Boolean true 是否成功触发 Hash String 4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4 模板内容的SHA256 ShareType String Private 模板共享类型。目前用户创建的模板的共享类型均为 Private。 Tags Map {“k1”:”v1”,”k2”:”v2”} 标签键及值映射,键值对数量限制为1至20。 TemplateFormat String JSON 模板格式。系统字段判断,为JSON或YAML。 TemplateId String t-94753d38 模板ID TemplateName String MyTemplate 模板名称 TemplateVersion String v1 模板版本。以“v”+数字的形式,数字从1开始。 UpdatedBy String root(130000) 模板更新者 UpdatedDate String 2019-05-16T10:26:14Z 模板更新时间 示例 请求示例 http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=GetTemplate&TemplateName=MyTemplate&<公共请求参数> 正常返回示例 XML 格式 { “FormatVersion”: “OOS-2019-06-01”, “Parameters”: { “Status”: { “Type”: “String”, “Description”: “(Required) The ID of the ECS instance.” } }, “Tasks”: [ { “Name”: “bar”, “Properties”: { “Parameters”: { “Status”: “{{ Status }}” }, “API”: “DescribeInstances”, “Service”: “Ecs” }, “Action”: “acs::ExecuteAPI”, “Outputs”: { “InstanceIds”: { “ValueSelector”: “.Instances.Instance[].InstanceId”, “Type”: “List<String>” } } } ], “Outputs”: { “InstanceIds”: { “Value”: “ {{ bar.InstanceIds }} “, “Type”: “List<String>” } } } FAAFCA45-AB65-4049-BFE0-868E1C8025AF root(130000) 2019-05-27T10:32:52Z root(130000) 2019-05-27T08:46:33Z 62eac5c64b9dae5c41e1e8b648baad95f812cab4f9221a5283edb882b5f8d712 Private JSON MyTemplate t-9475828d38 v1 v2 v1 JSON 格式 { “Content”: “{ “FormatVersion”: “OOS-2019-06-01”, “Parameters”: { “Status”: { “Type”: “String”, “Description”: “(Required) The ID of the ECS instance.” } }, “Tasks”: [ { “Name”: “bar”, “Properties”: { “Parameters”: { “Status”: “{{ Status }}” }, “API”: “DescribeInstances”, “Service”: “Ecs” }, “Action”: “acs::ExecuteAPI”, “Outputs”: { “InstanceIds”: { “ValueSelector”: “.Instances.Instance[].InstanceId”, “Type”: “List” } } } ], “Outputs”: { “InstanceIds”: { “Value”: “ {{ bar.InstanceIds }} “, “Type”: “List” } } } “, “RequestId”: “FAAFCA45-AB65-4049-BFE0-868E1C8025AF”, “Template”: { “CreatedBy”: “root(130000)”, “CreatedDate”: “2019-05-27T10:32:52Z”, “UpdatedBy”: “root(130000)”, “UpdatedDate”: “2019-05-27T08:46:33Z”, “Hash”: “62eac5c64b9dae5c41e1e8b648baad95f812cab4f9221a5283edb882b5f8d712”, “ShareType”: “Private”, “TemplateFormat”: “JSON”, “TemplateName”: “MyTemplate”, “TemplateId”: “t-9475828d38”, “Tags”: { “k1”: “ v1 “, “k2”: “ v2 “ }, “TemplateVersion”: “v1” } } 错误码 访问错误中心查看更多错误码。 </article> 调用ListExecutionRiskyTasks获取模版中的高风险任务。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 ListExecutionRiskyTasks 系统规定参数。取值:ListExecutionRiskyTasks。 TemplateName String 是 myTemplate 模板名称 RegionId String 否 cn-hangzhou 地域ID 返回数据 名称 类型 示例值 描述 RequestId String C04B668D-D2DD-4B40-B6E9-0E3C4F53D5B5 请求ID RiskyTasks 风险任务 示例 请求示例 http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=ListExecutionRiskyTasks &TemplateName=myTemplate &<公共请求参数> 正常返回示例 XML 格式 C04B668D-D2DD-4B40-B6E9-0E3C4F53D5B5 parenttask1 childtask2 root template name ECS DeleteInstance task3 root template name SLB RemoveBackendServers JSON 格式 { "RiskyTasks":[ { "API":"DeleteInstance", "Service":"ECS", "Template":[ "root template name" ], "Task":[ "parenttask1", "childtask2" ] }, { "API":"RemoveBackendServers", "Service":"SLB", "Template":[ "root template name" ], "Task":[ "task3" ] } ], "RequestId":"C04B668D-D2DD-4B40-B6E9-0E3C4F53D5B5" } 错误码 访问错误中心查看更多错误码。 调用ListTemplates查询模板,支持多种过滤方式。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 ListTemplates 系统规定参数。取值:ListTemplates。 CreatedBy String 否 ACS 模板创建者。 对于阿里云官方提供的模板,为ACS 对于用户个人创建的模板,可填写 UID 进行筛选,或填写 用户名称 进行筛选 CreatedDateAfter String 否 2019-05-16T10:26:14Z 创建时间大于等于指定时间的模板。 格式为:YYYY-MM-DDThh:mm:ssZ CreatedDateBefore String 否 2019-05-16T10:26:14Z 创建时间小于等于指定时间的模板。 格式为:YYYY-MM-DDThh:mm::ssZ HasTrigger Boolean 否 true 是否触发 MaxResults Integer 否 50 分页大小。取值范围:20-100。默认为50。 NextToken String 否 xxx 对查询结果进行翻页时需要传入的Token值,如有则获取自当前页的返回值。 RegionId String 否 cn-hangzhou 地域ID ShareType String 否 Private 分享类型。取值范围: Public Private SortField String 否 Popularity 排序字段。取值范围: TotalExecutionCount(默认值):总执行次数 Popularity:受欢迎程度 TemplateName:模板名称 CreatedDate:创建时间 SortOrder String 否 Descending 排序方向。取值范围: Ascending:升序 Descending(默认值):降序 Tags Map 否 {“k1”:”v1”,”k2”:”v2”} 标签键及值的映射,键值对数量限制为1至20。 TemplateFormat String 否 YAML 模板格式。取值范围: JSON YAML TemplateName String 否 MyTemplate 模板名称。列出含所填模板名称的所有模板。 返回数据 名称 类型 示例值 描述 MaxResults Integer 50 分页大小。 NextToken String xxx 对查询结果进行翻页时需要传入的Token值,如有则获取自当前页的返回值。 RequestId String BEF54BA-17B6-449F-A219-49ACB157E3 请求ID Templates Array 模板元信息 CreatedBy String root(1309200) 模板创建者 CreatedDate String 2019-05-16T10:26:14Z 模板创建时间 Description String Describe instances of given status 模板说明 HasTrigger Boolean true 是否成功触发 Hash String 4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4 模板内容的SHA256 Popularity Integer 8 公共模板模板受欢迎程度。范围是1-10,数字越高表示越受欢迎。若ShareType为Private,该字段值为-1。 说明 该字段在ShareType为Public时有意义。 </tr> <tr class="row-level-4-7"> <td class="entry colsep-1 rowsep-1">ShareType</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-ShareType">Public</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-ShareType"> <p class="p">模板共享类型。目前用户创建的模板的共享类型均为 <strong class="ph b">Private</strong>。取值范围: </p> <ul class="ul"> <li class="li"><strong class="ph b">Public</strong></li> <li class="li"><strong class="ph b">Private</strong></li> </ul> </td> </tr> <tr class="row-level-4-8"> <td class="entry colsep-1 rowsep-1">Tags</td> <td class="entry colsep-1 rowsep-1">Map</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-Tags">{"k1":"k2","k2":"v2"}</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-Tags"> <p class="p">标签键及值,键值对数量限制为1至20。</p> </td> </tr> <tr class="row-level-4-9"> <td class="entry colsep-1 rowsep-1">TemplateFormat</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-TemplateFormat">JSON</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-TemplateFormat"> <p class="p">模板格式。系统字段判断,为JSON或YAML。</p> </td> </tr> <tr class="row-level-4-10"> <td class="entry colsep-1 rowsep-1">TemplateId</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-TemplateId">t-94753deed38</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-TemplateId"> <p class="p">模板ID</p> </td> </tr> <tr class="row-level-4-11"> <td class="entry colsep-1 rowsep-1">TemplateName</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-TemplateName">MyTemplate</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-TemplateName"> <p class="p">模板名称</p> </td> </tr> <tr class="row-level-4-12"> <td class="entry colsep-1 rowsep-1">TemplateVersion</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-TemplateVersion">v1</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-TemplateVersion"> <p class="p">模板版本。以“v”+数字的形式,数字从1开始。</p> </td> </tr> <tr class="row-level-4-13"> <td class="entry colsep-1 rowsep-1">TotalExecutionCount</td> <td class="entry colsep-1 rowsep-1">Integer</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-TotalExecutionCount">5</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-TotalExecutionCount"> <p class="p">私有模板总执行次数。若<strong class="ph b">ShareType</strong>为<strong class="ph b">Public</strong>,该字段值为<code class="ph codeph">-1</code>。 </p> <div class="note note note-note"> <div class="note-icon-wrapper"><i class="icon-note note"></i></div> <div class="note-content"><strong>说明</strong> 该字段在<strong class="ph b">ShareType</strong>为<strong class="ph b">Private</strong>时有意义。 </div> </div> </td> </tr> <tr class="row-level-4-14"> <td class="entry colsep-1 rowsep-1">UpdatedBy</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-UpdatedBy">root(13092000)</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-UpdatedBy"> <p class="p">模板更新者</p> </td> </tr> <tr class="row-level-4-15"> <td class="entry colsep-1 rowsep-1">UpdatedDate</td> <td class="entry colsep-1 rowsep-1">String</td> <td class="entry colsep-1 rowsep-1" id="result-example-Templates-UpdatedDate">2019-05-16T10:26:14Z</td> <td class="entry colsep-1 rowsep-1" id="result-description-Templates-UpdatedDate"> <p class="p">模板更新时间</p> </td> </tr> </tbody> </table> </section> <section class="section" id="demo"> <h2 class="title sectiontitle" id="h2-url-4">示例</h2> <p class="p">请求示例</p> <pre class="pre codeblock" id="request-demo"><code> http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=ListTemplates&<公共请求参数> 正常返回示例 <p class="p"><code class="ph codeph">XML</code> 格式 </p> <pre class="pre codeblock" id="xml-return-success-demo"><code><ListTemplatesResponse> <MaxResults>50</MaxResults> <RequestId>BEF54BA-17B6-449F-A219-49ACB157E3</RequestId> <Templates> <CreatedBy>root(13090000)</CreatedBy> <CreatedDate>2019-05-14T09:16:37Z</CreatedDate> <UpdatedBy>root(130900000)</UpdatedBy> <UpdatedDate>2019-05-27T08:46:33Z</UpdatedDate> <Description></Description> <Hash>d02b84917e5a82c672630bf041a61dd5dc52fbc481ff98516c6a81876f3d9c01</Hash> <ShareType>Private</ShareType> <TemplateFormat>JSON</TemplateFormat> <TemplateName>MyTemplate</TemplateName> <TemplateId>t-94753dd828d38</TemplateId> <Tags> <k1> v1 </k1> <k2> v2 </k2> </Tags> <TemplateVersion>v1</TemplateVersion> <TotalExecutionCount>0</TotalExecutionCount> <Popularity>-1</Popularity> </Templates> JSON 格式 { “RequestId”:”BEF54BA-17B6-449F-A219-49ACB157E3”, “MaxResults”:50, “Templates”:[ { “TemplateName”:”MyTemplate”, “TotalExecutionCount”:0, “Description”:””, “TemplateFormat”:”JSON”, “Popularity”:-1, “TemplateId”:”t-94753dd828d38”, “Tags”: {“k1”: “ v1 “, “k2”: “ v2 “}, “Hash”:”d02b84917e5a82c672630bf041a61dd5dc52fbc481ff98516c6a81876f3d9c01”, “TemplateVersion”:”v1”, “UpdatedDate”:”2019-05-27T08:46:33Z”, “CreatedBy”:”root(13090000)”, “CreatedDate”:”2019-05-14T09:16:37Z”, “UpdatedBy”:”root(130900000)”, “ShareType”:”Private” } ]} 错误码 <p class="p" cond-props="intl">访问<a href="https://error-center.alibabacloud.com/status/product/oos">错误中心</a>查看更多错误码。 </p> </section> </div> </article> 调用UpdateTemplate更新一个已经存在的模板。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 UpdateTemplate 系统规定参数。取值:UpdateTemplate。 Content String 是 {“FormatVersion”: “OOS-2019-06-01”, “Description”: “Describe instances of given status”, “Parameters”: {“Status”: {“Type”: “String”, “Description”: “(Required) The status of the Ecs instance.”}}, “Tasks”: [{“Properties”: {“Parameters”: {“Status”: “{{ Status }}”}, “API”: “DescribeInstances”, “Service”: “Ecs”}, “Name”: “foo”, “Action”: “ACS::ExecuteApi”}] 模板内容。JSON或YAML格式,长度限制为 64 KB。 TemplateName String 是 MyTemplate 模板名称。内容限制为字母、数字、中划线、下划线,长度200字符,且不能以ALIYUN、ACS、ALIBABA、ALICLOUD开头。 RegionId String 否 cn-hangzhou 地域ID Tags Map 否 {“k1”:”v1”,”k2”:”v2”} 标签键及值映射,键值对数量限制为1至20。 返回数据 名称 类型 示例值 描述 RequestId String 2075899A-585D-4A41-A9B2-28DF4F534F 请求ID Template 模板元信息 CreatedBy String root(130920000) 模板创建者 CreatedDate String 2019-05-16T10:26:14Z 模板创建时间 Description String Describe instances of given status 模板说明 HasTrigger Boolean true 是否成功触发 Hash String 4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4 模板内容的SHA256 ShareType String Private 模板共享类型。目前用户创建的模板的共享类型均为 Private。 Tags Map {“k1”:”v1”,”k2”:”v2”} 标签键及值,键值对数量限制为1至20。 TemplateFormat String JSON 模板格式。系统字段判断,为JSON或YAML。 TemplateId String t-94753deed38 模板ID TemplateName String MyTemplate 模板名称 TemplateVersion String v2 模板版本。以“v”+数字的形式,数字从1开始。 UpdatedBy String root(1309000) 模板更新者 UpdatedDate String 2019-05-16T10:26:14Z 模板更新时间 示例 请求示例 http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=UpdateTemplate&Content={“FormatVersion”: “OOS-2019-06-01”, “Description”: “Describe instances of given status”, “Parameters”: {“Status”: {“Type”: “String”, “Description”: “(Required) The status of the Ecs instance.”}}, “Tasks”: [{“Properties”: {“Parameters”: {“Status”: “{{ Status }}”}, “API”: “DescribeInstances”, “Service”: “Ecs”}, “Name”: “foo”, “Action”: “ACS::ExecuteApi”}]&TemplateName=MyTemplate&<公共请求参数> 正常返回示例 XML 格式 2075899A-585D-4A41-A9B2-28DF4F534F root(13090000) 2019-05-27T08:46:33Z root(13090000) 2019-05-27T08:46:33Z Describe instances of given status 4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4 Private JSON MyTemplate t-94753de38 v1 v2 v2 JSON 格式 { “RequestId”: “2075899A-585D-4A41-A9B2-28DF4F534F”, “Template”: { “CreatedBy”: “root(13090000)”, “CreatedDate”: “2019-05-27T08:46:33Z”, “UpdatedBy”: “root(13090000)”, “UpdatedDate”: “2019-05-27T08:46:33Z”, “Description”: “Describe instances of given status”, “Hash”: “4bc7d7a21b3e003434b9c223f6e6d2578b5ebfeb5be28c1fcf8a8a1b11907bb4”, “ShareType”: “Private”, “TemplateFormat”: “JSON”, “TemplateName”: “MyTemplate”, “TemplateId”: “t-94753de38”, “Tags”: { “k1”: “ v1 “, “k2”: “ v2 “ }, “TemplateVersion”: “v2” } } 错误码 访问错误中心查看更多错误码。 </article> 调用ValidateTemplateContent校验一个模版是否合法。 调试 您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试 请求参数 名称 类型 是否必选 示例值 描述 Action String 是 ValidateTemplateContent 系统规定参数。取值:ValidateTemplateContent。 Content String 是 {"FormatVersion": "OOS-2019-06-01", "Description": "Describe instances of given status", "Parameters": {"Status": {"Type": "String", "Description": "(Required) The status of the Ecs instance."}}, "Tasks": [{"Properties": {"Parameters": {"Status": "{{ Status }}"}, "API": "DescribeInstances", "Service": "Ecs"}, "Name": "foo", "Action": "ACS::ExecuteApi"}]} 模板内容。JSON或YAML格式,长度限制为 64 KB。 RegionId String 否 cn-hangzhou 地域ID 返回数据 名称 类型 示例值 描述 Outputs String {} 模板输出 Parameters String { "Status": { "Description": "(Required) The status of the Ecs instance.", "Type": "String" } } 模板参数 RamRole String OOSServiceRole RAM角色 RequestId String ADF2066B-4017-4EF0-861C-C0FF3A9F1ED4 请求ID Tasks 模板中定义的任务 示例 请求示例 http(s)://oos.cn-hangzhou.aliyuncs.com/?Action=ValidateTemplateContent &Content={"FormatVersion": "OOS-2019-06-01", "Description": "Describe instances of given status", "Parameters": {"Status": {"Type": "String", "Description": "(Required) The status of the Ecs instance."}}, "Tasks": [{"Properties": {"Parameters": {"Status": "{{ Status }}"}, "API": "DescribeInstances", "Service": "Ecs"}, "Name": "foo", "Action": "ACS::ExecuteApi"}]} &<公共请求参数> 正常返回示例 XML 格式 ADF2066B-4017-4EF0-861C-C0FF3A9F1ED4 (Required) The status of the Ecs instance. String OOSServiceRole foo DescribeInstances {{ Status }} Ecs JSON 格式 { "Outputs":{}, "Parameters":{ "Status":{ "Description":"(Required) The status of the Ecs instance.", "Type":"String" } }, "RequestId":"ADF2066B-4017-4EF0-861C-C0FF3A9F1ED4", "Tasks":[ { "Name":"foo", "Properties":{ "Parameters":{ "Status":"{{ Status }}" }, "API":"DescribeInstances", "Service":"Ecs" } } ], "RamRole":"OOSServiceRole" } 错误码 访问错误中心查看更多错误码。

1934890530796658 2020-03-24 11:45:43 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板