我们使用markdown语法存储在数据库中的文本 要取出来显示为HTML格式需要用到一个外部插件
不然它就是markdown语法的一堆字符串
Github插件地址
使用插件
1.在pom,xml引入需要用的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!--commommark插件--> <dependency> <groupId>com.atlassian.commonmark</groupId> <artifactId>commonmark</artifactId> <version>0.15.2</version> </dependency> <!--为标题添加id的扩展部分--> <dependency> <groupId>com.atlassian.commonmark</groupId> <artifactId>commonmark-ext-heading-anchor</artifactId> <version>0.15.2</version> </dependency> <!--表格的扩展部分 如果markdown里有表格需要这个扩展--> <dependency> <groupId>com.atlassian.commonmark</groupId> <artifactId>commonmark-ext-gfm-tables</artifactId> <version>0.15.2</version> </dependency> |
如果依赖标红not found
方法一: 找到pom.xml
右击 --> Maven --> reImport
方法二: file–> Invalid Caches and Restart
intellij IDEA— 报inspects a maven model for resolution problems
2. 创建调用方法的工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | package com.lrm.util; import org.commonmark.Extension; import org.commonmark.ext.gfm.tables.TableBlock; import org.commonmark.ext.gfm.tables.TablesExtension; import org.commonmark.ext.heading.anchor.HeadingAnchorExtension; import org.commonmark.node.Link; import org.commonmark.node.Node; import org.commonmark.parser.Parser; import org.commonmark.renderer.html.AttributeProvider; import org.commonmark.renderer.html.AttributeProviderContext; import org.commonmark.renderer.html.AttributeProviderFactory; import org.commonmark.renderer.html.HtmlRenderer; import java.util.*; /** * Created by limi on 2017/10/22. */ public class MarkdownUtils {<!-- --> /** * markdown格式转换成HTML格式 * @param markdown * @return */ public static String markdownToHtml(String markdown) {<!-- --> Parser parser = Parser.builder().build(); Node document = parser.parse(markdown); HtmlRenderer renderer = HtmlRenderer.builder().build(); return renderer.render(document); } /** * 增加扩展[标题锚点,表格生成] * Markdown转换成HTML * @param markdown * @return */ public static String markdownToHtmlExtensions(String markdown) {<!-- --> //h标题生成id Set<Extension> headingAnchorExtensions = Collections.singleton(HeadingAnchorExtension.create()); //转换table的HTML List<Extension> tableExtension = Arrays.asList(TablesExtension.create()); Parser parser = Parser.builder() .extensions(tableExtension) .build(); Node document = parser.parse(markdown); HtmlRenderer renderer = HtmlRenderer.builder() .extensions(headingAnchorExtensions) .extensions(tableExtension) .attributeProviderFactory(new AttributeProviderFactory() {<!-- --> public AttributeProvider create(AttributeProviderContext context) {<!-- --> return new CustomAttributeProvider(); } }) .build(); return renderer.render(document); } /** * 处理标签的属性 */ static class CustomAttributeProvider implements AttributeProvider {<!-- --> @Override public void setAttributes(Node node, String tagName, Map<String, String> attributes) {<!-- --> //改变a标签的target属性为_blank if (node instanceof Link) {<!-- --> attributes.put("target", "_blank"); } if (node instanceof TableBlock) {<!-- --> attributes.put("class", "ui celled table"); } } } public static void main(String[] args) {<!-- --> String table = "| hello | hi | 哈哈哈 |\n" + "| ----- | ---- | ----- |\n" + "| 斯维尔多 | 士大夫 | f啊 |\n" + "| 阿什顿发 | 非固定杆 | 撒阿什顿发 |\n" + "\n"; String a = "[imCoding 爱编程](http://www.lirenmi.cn)"; System.out.println(markdownToHtmlExtensions(a)); } } |