在 Spring 启动时自动将 HashSet 转换为连接字符串

Automatically convert HashSet to concatenated string in Spring Boot

我是 Spring Boot 的新手,目前正在为 CMS 创建一个表单来创建文章。文章中有类似于 SO 的标签系统的关键字。现在,它是一个简单的以逗号分隔的关键字列表。但是,当我试图依靠 thymeleaf 将我的 Command 对象转换为我想要的格式时,我 运行 陷入了一个问题。以下是相关对象:

@Setter
@NoArgsConstructor
public class ArticleCommand {
    private Long id;
    private String title;
    private String slug;
    private String summary;
    private String body;
    private Set<ArticleKeywordCommand> keywords = new HashSet<>();
}
@Getter
@Setter
@NoArgsConstructor
public class ArticleKeywordCommand {
    private ArticleKeywordsKey id;
    private Long articleId;
    private KeywordCommand keyword;

    @Override
    public String toString() {
        return keyword.getName();
    }
}

如您所见,我向 ArticleKeywordCommand 添加了一个 toString() 方法,目的是使将关键字值输出到输入字段的表单包含以逗号分隔的列表形式的值。这...有点像,但不是我要找的。

ArticleCommand.keywords 的输出是一个字符串数组,“[technology, finance]”。我需要的只是一个字符串 "technology, finance"。

处理关键字集输出转换的好方法是什么? Thymeleaf 中是否有一些东西可以在接收到一组值时将值连接成一个字符串?或者我可以向命令提供一个注释,告诉它如何处理它?

您可以在 thymeleaf 中使用 #strings.listJoinhttps://www.thymeleaf.org/apidocs/thymeleaf/3.0.0.RELEASE/index.html?org/thymeleaf/expression/Strings.html(它似乎不允许我在那个页面上锚定 link,所以只需搜索 listJoin)

例如,如果您的型号名称是 articles,百里香叶可能看起来像这样:

<p th:text="${#strings.listJoin(articles.getKeywords(), ', ')}"></p>