当前位置: 首页 > news >正文

南通做网站的花云在网站的标题上怎么做图标

南通做网站的花云,在网站的标题上怎么做图标,天坛整装体验馆地址,安徽六安有什么好玩的景点DataCap 支持自定义 File 转换器#xff0c;使用者可以编写自己的文件转换器集成到 DataCap 中。该文档主要讲解如何快速集成一个文件转换器到 DataCap 系统中。 该模块我们主要使用到的是 file 模块内的代码#xff0c;我们本文使用 json 来做示例。 模块基本配置 新建项目…DataCap 支持自定义 File 转换器使用者可以编写自己的文件转换器集成到 DataCap 中。该文档主要讲解如何快速集成一个文件转换器到 DataCap 系统中。 该模块我们主要使用到的是 file 模块内的代码我们本文使用 json 来做示例。 模块基本配置 新建项目后在 pom.xml 文件中增加以下内容 dependenciesdependencygroupIdorg.jetbrains.kotlin/groupIdartifactIdkotlin-reflect/artifactId/dependencydependencygroupIdcom.google.inject/groupIdartifactIdguice/artifactId/dependencydependencygroupIdch.qos.logback/groupIdartifactIdlogback-classic/artifactId/dependencydependencygroupIdio.edurt.datacap/groupIdartifactIddatacap-file-spi/artifactId/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactId/dependency /dependenciesbuildpluginsplugingroupIdorg.jetbrains.dokka/groupIdartifactIddokka-maven-plugin/artifactId/plugin/plugins /build我们添加 datacap-file-spi 依赖这样我们就可以实现集成文件转换器。 Json Module 加载器 package io.edurt.datacap.file.jsonimport com.google.inject.multibindings.Multibinder import io.edurt.datacap.file.File import io.edurt.datacap.file.FileModuleclass JsonModule : FileModule() {override fun configure(){Multibinder.newSetBinder(this.binder(), File::class.java).addBinding().to(JsonFile::class.java)} }Json File 转换器 package io.edurt.datacap.file.jsonimport com.fasterxml.jackson.core.JsonEncoding import com.fasterxml.jackson.core.JsonFactory import com.fasterxml.jackson.core.JsonGenerationException import com.fasterxml.jackson.databind.JsonNode import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.node.ObjectNode import io.edurt.datacap.common.utils.DateUtils import io.edurt.datacap.file.File import io.edurt.datacap.file.FileConvert.formatFile import io.edurt.datacap.file.model.FileRequest import io.edurt.datacap.file.model.FileResponse import org.slf4j.LoggerFactory.getLogger import java.io.BufferedReader import java.io.IOException import java.io.InputStreamReader import java.util.Objects.requireNonNullclass JsonFile : File {private val log getLogger(this::class.java)override fun format(request: FileRequest): FileResponse{val response FileResponse()try{log.info(${name()} format start time [ ${DateUtils.now()} ])log.info(${name()} format headers start)response.headers request.headerslog.info(${name()} format headers end)log.info(${name()} format columns start)val mapper ObjectMapper()val columns mutableListOfAny()request.columns.forEach { column -val jsonNode mapper.createObjectNode()for (headerIndex in request.headers.indices){val header request.headers[headerIndex] as Stringwhen (column){is List* - jsonNode.putPOJO(header, column[headerIndex])else - jsonNode.putPOJO(header, column)}}columns.add(jsonNode)}response.columns columnslog.info(${name()} format columns end)log.info(${name()} format end time [ ${DateUtils.now()} ])response.successful true}catch (e: IOException){response.successful falseresponse.message e.message}return response}override fun formatStream(request: FileRequest): FileResponse{val response FileResponse()try{requireNonNull(Stream must not be null)log.info(${name()} format stream start time [ ${DateUtils.now()} ])val mapper ObjectMapper()request.stream?.let {BufferedReader(InputStreamReader(it, Charsets.UTF_8)).use { reader -val jsonNode: JsonNode mapper.readTree(reader)log.info(${name()} format stream json node count [ ${jsonNode.size()} ])val headers mutableListOfAny()if (jsonNode.isArray jsonNode.size() 0){jsonNode[0].fieldNames().forEachRemaining { headers.add(it) }}response.headers headersval columns mutableListOfAny()if (jsonNode.isArray){jsonNode.elements().forEachRemaining { node -val column mutableMapOfString, Any?()node.fields().forEachRemaining { field -column[field.key] field.value}columns.add(column)}}response.columns columnsit.close()}}log.info(${name()} format stream end time [ ${DateUtils.now()} ])response.successful true}catch (e: IOException){response.successful falseresponse.message e.message}return response}override fun writer(request: FileRequest): FileResponse{val response FileResponse()try{log.info(${name()} writer origin path [ ${request.path} ])log.info(${name()} writer start time [ ${DateUtils.now()} ])val file formatFile(request, name())log.info(${name()} writer file absolute path [ ${file.absolutePath} ])val factory JsonFactory()factory.createGenerator(file, JsonEncoding.UTF8).use { generator -generator.writeStartArray()request.columns.forEach { column -generator.writeStartObject()for (headerIndex in request.headers.indices){when (column){is List* - generator.writeObjectField(request.headers[headerIndex] as String, column[headerIndex])is ObjectNode -{generator.codec ObjectMapper()val header request.headers[headerIndex] as Stringgenerator.writeObjectField(header, column.get(header))}else - generator.writeObjectField(request.headers[headerIndex] as String, column)}}generator.writeEndObject()}generator.writeEndArray()}log.info(${name()} writer end time [ ${DateUtils.now()} ])response.path file.absolutePathresponse.successful true}catch (e: IOException){response.successful falseresponse.message e.message}catch (e: JsonGenerationException){response.successful falseresponse.message e.message}return response}override fun reader(request: FileRequest): FileResponse{val response FileResponse()try{log.info(${name()} reader origin path [ ${request.path} ])log.info(${name()} reader start time [ ${DateUtils.now()} ])val file formatFile(request, name())log.info(${name()} reader file absolute path [ ${file.absolutePath} ])val mapper ObjectMapper()val jsonNode: JsonNode mapper.readTree(file)log.info(${name()} reader file json node count [ ${jsonNode.size()} ])log.info(${name()} reader file headers start)val headers mutableListOfAny()if (jsonNode.isArray jsonNode.size() 0){jsonNode[0].fieldNames().forEachRemaining { headers.add(it) }}response.headers headerslog.info(${name()} reader file headers end)log.info(${name()} reader file columns start)val columns mutableListOfAny()if (jsonNode.isArray){jsonNode.elements().forEachRemaining { node -val column mutableMapOfString, Any?()node.fields().forEachRemaining { field -column[field.key] field.value}columns.add(column)}}response.columns columnslog.info(${name()} reader file columns end)response.successful true}catch (e: Exception){response.successful falseresponse.message e.message}return response} }File SPI 加载器 在 resources 源目录下添加 META-INF 和 services 目录格式为 resources/META-INF/services创建 io.edurt.datacap.file.FileModule 文件内容如下 io.edurt.datacap.file.json.JsonModule通过以上内容我们实现了 Json 文件转换器的支持。我们只需要在要使用 Json 文件转换器的地方引用该模块即可。比如我们在 server 模块中使用到该模块则在 server/pom.xml 文件中增加以下内容 dependencygroupIdio.edurt.datacap/groupIdartifactIddatacap-file-json/artifactIdversion${project.version}/version /dependencyJson Module 测试 package io.edurt.datacap.file.jsonimport com.google.inject.Guice.createInjector import com.google.inject.Injector import com.google.inject.Key import com.google.inject.TypeLiteral import io.edurt.datacap.file.File import io.edurt.datacap.file.FileManager import org.junit.Assert.assertEquals import org.junit.Testclass JsonModuleTest {private val injector: Injector createInjector(FileManager())Testfun test(){injector.getInstance(Key.get(object : TypeLiteralSetFile(){})).stream().findFirst().ifPresent {assertEquals(Json, it.name())}} }Json SPI 测试 package io.edurt.datacap.file.jsonimport com.google.inject.Guice.createInjector import com.google.inject.Injector import io.edurt.datacap.file.FileFilter import io.edurt.datacap.file.FileManager import io.edurt.datacap.file.model.FileRequest import org.junit.Before import org.junit.Test import org.slf4j.LoggerFactory.getLogger import java.io.File import java.io.FileInputStream import kotlin.test.assertTrueclass JsonFileTest {private val log getLogger(this::class.java)private val name Jsonprivate var injector: Injector? nullprivate val request: FileRequest FileRequest()Beforefun before(){injector createInjector(FileManager())request.name testrequest.path System.getProperty(user.dir)request.headers listOf(name, age)val l1 listOf(Test, 12)val l2 listOf(Test1, 121)request.columns listOf(l1, l2)}Testfun testFormat(){injector?.let { injector -FileFilter.filter(injector, name).ifPresent { file -val response file.format(request)log.info(headers: [ ${response.headers} ])response.columns.let { columns -columns.forEachIndexed { index, line -log.info(index: [ $index ], line: [ $line ])}}assertTrue {response.successful true}}}}Testfun testFormatStream(){injector?.let { injector -FileFilter.filter(injector, name).ifPresent { file -request.stream FileInputStream(File(${System.getProperty(user.dir)}/${request.name}.json))val response file.formatStream(request)log.info(headers: [ ${response.headers} ])response.columns.let { columns -columns.forEachIndexed { index, line -log.info(index: [ $index ], line: [ $line ])}}assertTrue {response.successful true}}}}Testfun testWriter(){injector?.let { injector -FileFilter.filter(injector, name).ifPresent { file -assertTrue {file.writer(request).successful true}}}}Testfun testReader(){injector?.let { injector -FileFilter.filter(injector, name).ifPresent { file -val response file.reader(request)log.info(headers: ${response.headers})response.columns.forEach {log.info(columns: $it)}assertTrue {response.successful true}}}} }
http://www.hkea.cn/news/14357475/

相关文章:

  • 壶关网站建设做创意美食的视频网站
  • 学做川菜最好的网站wordpress 移动版主题
  • 十大免费视频素材网站合肥seo排名优化
  • 购物网站建设特色高清crm软件价格欧美
  • 做购物网站的素材华强北
  • 惠州微网站建设专升本可以报考哪些大学
  • 更改wordpress主题名称嘉兴网站排名优化费用
  • 做宣传的网站有哪些电商网站搜索引擎怎么做
  • 鹤庆县公路建设网站济南企业建站哪家做的好
  • 网站接入支付宝在线交易怎么做网站建设实施计划包括哪些方面
  • 网站建设与管理专业实训室商业网点和商铺的区别
  • 哪个网站有做电箱电柜的图纸音乐分享 wordpress
  • 网站开发+演讲seo技术代理
  • 十大免费建站程序wordpress做网站图标的软件
  • 国外建站用什么最多做网站如何获得阿里巴巴投资
  • 网站统计模板开源网站模板cms
  • 做神马网站优化小升初最好的补课机构排行榜
  • 网站做3年3年包括什么软件网站防恶意注册
  • 网站建设店铺网站国际化怎么做
  • 正规网站建设推荐做电子商务网站建设工资多少
  • 宁波网站建设与设计开发网站流量站怎么做的
  • 天津做网站那家好东乌珠穆沁旗网站建设
  • 临沂免费自助建站模板9 1短视频安装
  • html网站如何更新wordpress 4.7 多站点
  • 哪家网站制作 优帮云石家庄信息门户网站定制
  • 上海网站建设高端定制windows优化大师的功能
  • 灯笼制作手工简单又漂亮拼多多标题优化软件
  • html网站开发语言wordpress搭论坛
  • 苏州企业网站开发企业网站建设需注意点
  • 吉林省城乡建设官方网站网站建设推广营销策划