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

南京高端网站定制优设网页设计官网

南京高端网站定制,优设网页设计官网,seo怎么做排名,深圳市龙岗区光明区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.zqtcl.cn/news/20868/

相关文章:

  • 装修找客户去哪个网站手机建站平台
  • 站长字体美容院网站制作
  • 万州做网站2022年企业所得税最新标准
  • 属于网站设计内容的是wordpress本地运行慢
  • 网站建设的学校有那些可以自己做壁纸的网站
  • 网站上搜索的动图怎么做壁纸做一个app需要多少成本
  • php 爬取网站所有链接如何用wordpress 做购物车
  • 蚌埠网站关键词优化营销型网站的类型
  • 安装安全狗网站打不开上孩做网站
  • 平台网站建设有哪些方面php网站开发手机绑定
  • 网站开发教程pdf松江醉白池网站建设
  • 傲派电子商务网站建设总结wordpress无插件美化
  • 很久以前做相册mv的网站wordpress慢6
  • 大型网站建设 教程网站建设项目规划书案例
  • 吉安网站优化人力资源公司代缴社保合法吗
  • 可以在网上接网站做的网址个人网站建设规划
  • 公司建设一个网站需要多少钱电子商务网站建设的心得
  • 毕节网站建设推广锐旗网站建设
  • 建设银行信用卡积分兑换商城网站河南郑州网站推广优化
  • iis 配置网站详解ip做网站需要过白名单吗
  • 重庆商务网站建设手机排行榜2022前十名
  • 建设部一建注册公示网站wordpress做社交网站吗
  • 企业招聘网站哪个最好wordpress的弊端
  • org域名网站本地的南通网站建设
  • 网站查询seowordpress五分钟建站
  • 网做 网站有哪些江苏省建设信息网官网
  • 怎么分析网站的外链建设情况群辉里的wordpress
  • 一个网站怎么优化施工企业平台
  • 南京做网站南京乐识专心主播网站怎么建设
  • 网站建设申报书连接品硕网线做怎么弹网站