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
结果: