gpt4 book ai didi

spring-boot - 如何将 Spring Boot 配置元数据文件转换为 HTML

转载 作者:行者123 更新时间:2023-12-02 03:43:23 26 4
gpt4 key购买 nike

我确信一定有一种优雅的方式来转动 Spring Boot configuration meta-data files转换为 HTML(或 Markdown 或...)。虽然我可以自己编写一个解析器,但我确信这个问题已经得到解决。然而,到目前为止我还没有找到线索。

最佳答案

Here是一个使用 org.springframework.boot:spring-boot-configuration-processor 将 Spring Boot 配置元数据转换为 HTML 的简单示例和org.freemarker:freemarker图书馆。

enter image description here

解析元数据

使用 spring-boot-configuration-processor 中的类解析 JSON 文件的库,

File metadataFile = new File("spring-configuration-metadata.json");
ConfigurationMetadata metadata =
new JsonMarshaller().read(new FileInputStream(metadataFile));

HTML 生成

将元数据转换为 Java 对象后,请使用 FreeMarker模板化以将其转换为 HTML 文件。它使用 metadata.ftl用于转换 metadata 的模板对象进入 metadata.html .

Configuration cfg = new Configuration(new Version(2, 3, 27));

// template is loaded from 'templates' folder under resources
cfg.setClassForTemplateLoading(
SpringConfigurationMetadataProcessorTest.class, "/templates");
cfg.setDefaultEncoding("UTF-8");
cfg.setLocale(Locale.US);
cfg.setTemplateExceptionHandler(
TemplateExceptionHandler.RETHROW_HANDLER);

Map<String, Object> input = new HashMap<String, Object>();
input.put("title", "Spring Configuration Metadata Example");
input.put("metadata", metadata);
input.put("GROUP", ItemMetadata.ItemType.GROUP);
input.put("PROPERTY", ItemMetadata.ItemType.PROPERTY);

Template template = cfg.getTemplate("metadata.ftl");

// write output into a file
Writer fileWriter = new FileWriter(new File("metadata.html"));
try {
template.process(input, fileWriter);
} finally {
fileWriter.close();
}

这是示例 metadata.ftl ,

<html>
<head>
<title>${title}</title>
</head>
<body>
<h1>${title}</h1>

<#if metadata.hints??>
<section>
<h1>Hints</h1>
<#list metadata.hints as hint>
<section>
<dl>
<dt><b>name: </b>${hint.name}</dt>
<#if hint.values?? && hint.values?size != 0>
<dt><b>values:</b></dt>
<#list hint.values as value>
<#if value.value??>
<dd><b>value: </b>${value.value}</dd>
</#if>
<#if value.description??>
<dd><b>description: </b>${value.description}</dd>
</#if>
<br/>
</#list>
</#if>
<#if hint.providers?? && hint.providers?size != 0>
<dt><b>providers:</b></dt>
<#list hint.providers as provider>
<#if provider.name??>
<dd><b>name: </b>${provider.name}</dd>
</#if>
<#if provider.parameters?? && provider.parameters?size != 0>
<dd><b>parameters:</b></dd>
<#list provider.parameters as key, value>
<dd>&nbsp;&nbsp;&nbsp;&nbsp;<b>${key}: </b>${value}
</dd>
</#list>
</#if>
<br/>
</#list>
</dl>
</#if>
</section>
</#list>
</section>
</#if>

<#if metadata.items??>
<section>
<h1>Groups</h1>
<#list metadata.items as item>
<#if item.isOfItemType(GROUP)>
<section>
<dl>
<#if item.sourceType??>
<dt><b>sourceType: </b> ${item.sourceType}</dt>
</#if>
<#if item.name??>
<dt><b>name: </b> ${item.name}</dt>
</#if>
<#if item.description??>
<dt><b>description: </b> ${item.description}</dt>
</#if>
<#if item.type??>
<dt><b>type: </b> ${item.type}</dt>
</#if>
<#if item.sourceMethod??>
<dt><b>sourceMethod: </b> ${item.sourceMethod}</dt>
</#if>
<#if item.defaultValue??>
<#if item.defaultValue?is_enumerable>
<dt><b>defaultValue: </b></dt>
<#list item.defaultValue as df>
<dd>${df}</dd>
</#list>
<#else>
<dt><b>defaultValue: </b> ${item.defaultValue}</dt>
</#if>
</#if>
<#if item.deprecation??>
<dt><b>deprecation: </b></dt>
<#if item.deprecation.reason??>
<dd><b>reason: </b> ${item.deprecation.reason}</dd>
</#if>
<#if item.deprecation.replacement??>
<dd><b>replacement: </b> ${item.deprecation.replacement}</dd>
</#if>
<#if item.deprecation.level??>
<dd><b>level: </b> ${item.deprecation.level}</dd>
</#if>
</#if>
</dl>
</section>
</#if>
</#list>
<h1>Properties</h1>
<#list metadata.items as item>
<#if item.isOfItemType(PROPERTY)>
<section>
<dl>
<#if item.sourceType??>
<dt><b>sourceType: </b> ${item.sourceType}</dt>
</#if>
<#if item.name??>
<dt><b>name: </b> ${item.name}</dt>
</#if>
<#if item.description??>
<dt><b>description: </b> ${item.description}</dt>
</#if>
<#if item.type??>
<dt><b>type: </b> ${item.type}</dt>
</#if>
<#if item.sourceMethod??>
<dt><b>sourceMethod: </b> ${item.sourceMethod}</dt>
</#if>
<#if item.defaultValue??>
<#if item.defaultValue?is_enumerable>
<dt><b>defaultValue: </b></dt>
<#list item.defaultValue as df>
<dd>${df}</dd>
</#list>
<#else>
<dt><b>defaultValue: </b> ${item.defaultValue}</dt>
</#if>
</#if>
<#if item.deprecation??>
<dt><b>deprecation: </b></dt>
<#if item.deprecation.reason??>
<dd><b>reason: </b> ${item.deprecation.reason}</dd>
</#if>
<#if item.deprecation.replacement??>
<dd><b>replacement: </b> ${item.deprecation.replacement}</dd>
</#if>
<#if item.deprecation.level??>
<dd><b>level: </b> ${item.deprecation.level}</dd>
</#if>
</#if>
</dl>
</section>
</#if>
</#list>
</section>
</#if>

</body>
</html>

关于spring-boot - 如何将 Spring Boot 配置元数据文件转换为 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47721418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com