如何在SpringBoot application.properties文件中对映射进行软编码,而不是对硬编码进行映射?

时间:2019-05-31 07:04:36

标签: java json spring-boot

所以,我想返回一个看起来像这样的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中对其进行软编码,以便以后如果我想添加更多的问题类型,我可以轻松地做到这一点?

1 个答案:

答案 0 :(得分:1)

一种方法是使用条目的List而不是条目的Map

@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"}]}