Итак, я хочу вернуть объект 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;
}
В то время как карта дает мне пары ключ-значение в фигурных скобках, она не позволяет мне установить один и тот же ключ для разных значений (по очевидным причинам). Есть ли другой способ вернуть указанный выше объект JSON? И можно ли программно закодировать его в application.properties
, чтобы, если позже я захочу добавить больше типов задач, я мог сделать это легко?
@Jens, теперь это действительный json?
Один из способов — использовать 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"}]}
Ваш пример не является допустимым json.