当前位置: 首页 > 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

结果:

相关文章:

  • 基于控制台的小车导航游戏开发详解(C++实现)
  • 嘉立创原理图、PCB常见问题
  • 10.thinkphp的响应
  • MCP协议驱动的功能纳米材料设计及其在光催化甲烷偶联中的创新应用
  • CPU Loading and Task Loading Visualization Tool
  • 加一:从简单问题到复杂边界的深度思考
  • 每日一记:CRT和图论
  • 【软考-高级】【信息系统项目管理师】【论文基础】资源管理过程输入输出及工具技术的使用方法
  • vue3专题1------父组件中更改子组件的属性
  • 【信息系统项目管理师】高分论文:论信息系统项目的干系人管理(商业银行绩效考核系统)
  • Prompt-Tuning 提示词微调
  • 离线安装elasticdump并导入和导出数据
  • Android Studio 获取配置资源与第三方包信息详解
  • ProfiNet转DeviceNet边缘计算网关多品牌集成实践:污水处理厂设备网络融合全流程解析
  • [特殊字符] Kotlin与C的类型别名终极对决:typealias vs typedef,如何让代码脱胎换骨?
  • 大模型API中转平台选择指南:如何找到优质稳定的服务
  • 从头开始掌握扩散概率模型
  • 知识就是力量——一些硬件的使用方式
  • 【Lua语言】Lua语言快速入门
  • C++用于保留浮点数的两位小数,使用宏定义方法(可兼容低版本Visual Studio)
  • “30小时不够”,泽连斯基建议延长停火至30天
  • 林诗栋4比1战胜梁靖崑,晋级世界杯男单决赛将和雨果争冠
  • 新华社经济随笔:把握不确定性中的确定性
  • 价格周报|本周生猪均价环比上涨,交易均重继续上升
  • 白兰花香飘京城,上海文化体验项目点亮中华民族共同体之美
  • 市场监管总局:在全国集中开展食用植物油突出问题排查整治