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

Java实现将MarkDown保留文档内容及格式输出到浏览器页面

项目目录

pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>PostgreSQL-easy</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.2.2.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.2.2.RELEASE</version></dependency><!-- JSON处理工具 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency><!-- PostgreSQL JDBC Driver --><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.24</version></dependency><!--  使用 CommonMark 转换 Markdown 到 HTML  --><dependency><groupId>org.commonmark</groupId><artifactId>commonmark</artifactId><version>0.21.0</version></dependency></dependencies></project>

config配置

MarkdownToHtmlConverter

使用 CommonMark 转换 Markdown 到 HTML。

package org.example.config;import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
import org.springframework.context.annotation.Configuration;@Configuration
public class MarkdownToHtmlConverter {public static String convert(String markdown) {// 创建一个 Markdown 解析器Parser parser = Parser.builder().build();// 解析 Markdown 文本org.commonmark.node.Node document = parser.parse(markdown);// 渲染为 HTMLHtmlRenderer renderer = HtmlRenderer.builder().build();return renderer.render(document);}public static void main(String[] args) {String markdown = "# Example Function\n" +"```sql\n" +"CREATE FUNCTION example() RETURNS void AS $$ BEGIN END; $$;\n" +"```";String html = convert(markdown);System.out.println(html);}
}
PostgreSQLStaticCode

存储静态的SQL语句。

package org.example.config;import org.springframework.context.annotation.Configuration;@Configuration
public class PostgreSQLStaticCode {/*** 4中函数参数类型:有参有返、有参无返...* 获取函数的定义* @return*/public String getFourCreateFunctionSQL(){return"**基本语法**\n\n" +"```sql\n" +"CREATE [ OR REPLACE ] FUNCTION function_name ( [ parameter_name parameter_type [, ...] ] )\n" +"    RETURNS return_type\n" +"    LANGUAGE plpgsql  -- 或其他支持的语言(如 SQL、Python 等)\n" +"AS $$\n" +"DECLARE\n" +"    -- 可选的变量声明\n" +"BEGIN\n" +"    -- 函数体:包含 SQL 语句、控制结构(IF、FOR 循环等)等\n" +"END $$;\n" +"```\n\n" +"> - `CREATE FUNCTION`: 创建一个新函数或替换现有的同名函数(使用 `OR REPLACE`)。\n" +"> - `function_name`: 函数名,用于在调用时标识和执行函数。\n" +"> - `parameter_name parameter_type`: 函数的输入参数,可以有多个参数,每个参数由名称和类型定义。\n" +"> - `RETURNS return_type`: 函数返回的数据类型。\n" +"> - `LANGUAGE`: 指定函数使用的编程语言,常见的是 `plpgsql`(PostgreSQL 的内置过程化语言)、`sql`(仅包含 SQL 语句的函数)、`plpythonu`(Python 函数,需安装插件支持)等。\n" +"> - `AS $$ ... $$`: 函数体的开始和结束标记,`$$` 之间是函数的实际代码部分。\n\n" +"### 1 无参无返\n\n" +"```sql\n" +"CREATE OR REPLACE FUNCTION fun_add()\n" +"    RETURNS void\n" +"    LANGUAGE plpgsql\n" +"AS $$\n" +"DECLARE\n" +"BEGIN\n" +"    UPDATE \"T_FROM\"\n" +"    SET \"Name\" = '111'\n" +"    WHERE \"ID\" = 1;\n" +"END;$$;\n\n" +"-- 调用函数\n" +"SELECT * FROM fun_add();\n" +"```\n\n" +"### 2 无参有返\n\n" +"```sql\n" +"CREATE OR REPLACE FUNCTION fun_add()\n" +"    RETURNS INTEGER\n" +"    LANGUAGE plpgsql\n" +"AS $$\n" +"DECLARE\n" +"BEGIN\n" +"    RETURN 1 + 2;\n" +"END;$$;\n\n" +"-- 调用函数\n" +"SELECT * FROM fun_add();\n" +"```\n\n" +"### 3 有参无返\n\n" +"```sql\n" +"CREATE OR REPLACE FUNCTION fun_add( a int, b text)\n" +"    RETURNS void\n" +"    LANGUAGE plpgsql\n" +"AS $$\n" +"DECLARE\n" +"BEGIN\n" +"    UPDATE \"T_FROM\"\n" +"    SET \"Name\" = b\n" +"    WHERE \"ID\" = a;\n" +"END;$$;\n\n" +"-- 调用函数\n" +"SELECT * FROM fun_add();\n" +"```\n\n" +"### ==4 有参有返==\n\n" +"**返回一个值**\n\n" +"```sql\n" +"CREATE OR REPLACE FUNCTION fun_add( a int, b int)\n" +"    RETURNS INTEGER\n" +"    LANGUAGE plpgsql\n" +"AS $$\n" +"DECLARE\n" +"    c INT;\n" +"BEGIN\n" +"    -- 给变量赋值\n" +"    c:= a + b;\n" +"    RETURN c;\n" +"END;$$;\n\n" +"-- 调用函数\n" +"SELECT * FROM fun_add( 1,2 );\n" +"```\n\n" +"**返回一个表**\n\n" +"```SQL\n" +"-- 创建 加法函数\n" +"CREATE OR REPLACE FUNCTION testfun ( a INT ) \n" +"    RETURNS TABLE( id INTEGER,name varchar(20)) \n" +"    LANGUAGE plpgsql \n" +"AS $$ \n" +"DECLARE\n" +"BEGIN\n" +"    -- 数据处理\n" +"    CREATE TEMP TABLE TEMP_T_FROM AS\n" +"    (\n" +"        SELECT \n" +"            \"ID\",\n" +"            \"Name\" \n" +"        FROM \"T_FROM\" \n" +"        WHERE \"ID\" = a\n" +"    );\n" +"    UPDATE TEMP_T_FROM SET \"Name\" = '修改后';\n" +"    -- 返回查询结果\n" +"    RETURN QUERY\n" +"    SELECT \"ID\",\"Name\" FROM TEMP_T_FROM;\n" +"    -- 删除临时表(如果有创建临时表就在最后删除)\n" +"    DROP TABLE IF EXISTS TEMP_T_FROM;\n" +"END; $$;\n\n" +"-- 调用函数\n" +"-- SELECT * FROM testfun (1)\n\n" +"-- 删除函数\n" +"-- DROP FUNCTION testfun(INT);\n" +"```\n\n" +"### 获取函数定义\n\n" +"```sql\n" +"SELECT   \n" +"    proname,\n" +"    prosrc AS function_definition,\n" +"    pg_get_functiondef(p.oid) AS function_definition\n" +"FROM   \n" +"    pg_proc p\n" +"WHERE   \n" +"    proname ilike 'QUERT_TO_FunDetails'    -- 函数名\n" +"--    AND pronamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'your_schema_name');\n" +"```\n\n" +"> - **`prosrc AS function_definition`**:返回函数的源代码(即函数体的 SQL 定义)。\n" +"> - **`pg_get_functiondef(p.oid) AS function_definition`**:返回函数的完整 SQL 创建定义(包含更多的元数据,如参数类型、返回类型等)。";}/*** 测试方法* * @return*/public String getTest() {String sqlCode ="# Example Function\n" +"```sql\n" +"CREATE FUNCTION example() RETURNS void AS $$ BEGIN END; $$;\n";return sqlCode;}
}

controller

package org.example.controller;import org.example.config.MarkdownToHtmlConverter;
import org.example.config.PostgreSQLStaticCode;
import org.example.service.FunctionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;@RestController
@RequestMapping("/api")
public class FunctionController {@Autowiredpublic MarkdownToHtmlConverter markdownToHtmlConverter;@GetMapping(value = "/getFourCreateFunctionSQL", produces = "text/html;charset=UTF-8")public String fourCreateFunctionSQL(){String fourCreateFunctionSQL = postgreSQLStaticCode.getFourCreateFunctionSQL();return markdownToHtmlConverter.convert(fourCreateFunctionSQL);}}

PostgreSQLApplication启动类

package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class PostgreSQLApplication {public static void main(String[] args) {SpringApplication.run(PostgreSQLApplication.class, args);}
}

application.yml

server:port: 8080

请求地址测试

http://localhost:8080/api/getFourCreateFunctionSQL

结果:

http://www.xdnf.cn/news/40699.html

相关文章:

  • 2.2/Q2,GBD数据库最新文章解读
  • 模拟算法(一)作业分析及答案
  • java lambda
  • C++入门七式——模板初阶
  • sed命令笔记250419
  • Nacos启动报错
  • BMS电池管理芯片BQ76920芯片手册详细解读
  • python基础知识点(2)
  • stack和queue
  • 借助LlamaIndex实现简单Agent
  • 多模态融合(十一): SwinFusion——武汉大学马佳义团队(二)
  • 英语四级翻译题练习文章示例
  • 生物化学笔记:医学免疫学原理23 免疫检查点分子与肿瘤免疫治疗(PD-1抑制剂黑色素瘤)
  • 最长子序列长度(LIS)--个数遍历的二分+贪心优化
  • 代码随想录背包问题完结
  • 面向AI时代与数字化转型关键期:中小企业IT人才储备计划研究分析
  • 在复杂性的迷宫里寻找路标 —— 读《人月神话》有感
  • 免费将AI生成图像放大4倍的方法
  • 如何写 commit message?
  • 细说STM32单片机FreeRTOS中断管理及其应用方法
  • 深入浅出伯努利分布:从 0‑1 随机世界到统计学习基石
  • 服务部署丨通过Docker部署AutoBangumi+qBittorrent实现自动追番
  • 云服务器性价比测评:Intel vs AMD vs Graviton
  • YuE本地部署完整教程,可用于ai生成音乐,歌曲
  • 老婆是用来爱的,不是用来吼的
  • CAN与CANFD协议说明
  • [Java · 初窥门径] Java API 文档使用说明
  • Python实例题:神经网络实现人脸识别任务
  • 离线安装elasticdump并导入和导出数据
  • 深度补全网络:如CSPN++填补稀疏点云的深度信息