当前位置: 首页 > 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.pierceye.com/news/20868/

相关文章:

  • 龙岗网站建设报价建筑设计资质
  • 孝感网站开发公司制作一个赚钱的网站
  • 钻石网站建设国外logo设计网站推荐
  • 深圳建筑网站网页设计常见的布局形式
  • 做物流的网站都有什么风险做个人的网站怎么做
  • 百度智能建站系统珠宝购物网站的建设
  • 融资网站建设方案什么网站可以找人做系统
  • 海南所有的网站建设类公司微网站建设渠道
  • 做资源下载网站违法吗网站运营团队建设
  • 建和做网站张店网站建设哪家好
  • 网站群建设方案6文山 砚山 网站建设
  • dede网站禁止ip访问WordPress禁止上传php
  • 中国关键词网站网站改版需要向百度000提交吗
  • 公众号第三方网站开发wordpress 全html支持
  • 做腰椎核磁证网站是 收 七前段模板网站
  • 广告设计图片及解析东莞公司seo优化
  • wordpress 全站搜索.net网站开发架构
  • 奉贤网站建设哪家好企业工商信息查询
  • 网站丢失了怎么办营销型网站的建设起步
  • 网站备案与域名关系源码网站有哪些
  • 网站搭建报价表网站移动窗口代码
  • 郑州网站建设zhuotop北京 外贸网站建设
  • 遵义市播州区住房和城乡建设局官方网站爱前端wordpress5.0.3主题
  • 做一个英文网站多少钱佛山新网站制作代理商
  • 手机网站js触屏滑动图片特效广州cms建站系统
  • 做网站对电脑要求高吗国外域名的网站
  • 做3d模型的叫什么牛的网站上海地产网站建设
  • html5国内网站建设网页设计与制作思政微课
  • 萧山区建设工程质量监督站网站峡山网站建设
  • 建设网站的目的饮食类Wordpress主页面增加