首页 > 解决方案 > 如何在 SpringBoot application.properties 文件中软编码映射而不是硬编码?

问题描述

所以,我想返回一个 JSON 对象,它应该如下所示:

{"Issues":[{"IssueName": "Loan"},{"IssueName": "Lease"},{"IssueName": "Other"}]}

到目前为止,我最接近这种格式的是通过以下代码:

@RequestMapping(value="/issueTypes", produces = MediaType.APPLICATION_JSON_VALUE)
    public  Map<String, String> getIssue(){
        HashMap<String, String> issue = new HashMap<>();
        issue.put("issues", "Loan");
        issue.put("issues", "Lease");
        issue.put("issues", "Other");
        return issue;
    }

虽然 map 在花括号中为我提供了键值对,但它不允许我将相同的键设置为不同的值(原因很明显)。有没有其他方法可以返回上述 JSON 对象?是否可以对其进行软编码,application.properties以便以后我想添加更多问题类型时可以轻松完成?

标签: javajsonspring-boot

解决方案


一种方法是使用 a Listof Entries 而不是MapEntries:

@Value("#{'${issues}'.split(',')}")
private List<String> issues;

@RequestMapping(value = "/issueTypes", produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, List<Map.Entry<String, String>>> getIssue() {
    Map<String, List<Map.Entry<String, String>>> m = new LinkedHashMap<>();
    m.put("Issues", issues.stream()
            .map(s -> Map.entry("issueName", s))
            .collect(Collectors.toList()));
    return m;
}

并在您的 application.properties 中:

issues=Loan,Lease,Other

输出:

{"Issues":[{"issueName":"Loan"},{"issueName":"Lease"},{"issueName":"Other"}]}

推荐阅读