Я отредактирую ответ, если найду что-то новое
аюсь выяснить, как написать хороший DTO для приложения Spring Boot, которое предоставляет возможности поиска другой службе (Python).
Так что у меня сейчас почти идеальная настройка. У меня только проблемы с представлением агрегатов, которые я получаю от Elasticsearch, как объектов на стороне Java.
Вот токаAggregation
DTO:
package com.example.dto.search;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
import java.util.Map;
@Getter @Setter @NoArgsConstructor
public class Aggregation {
private List<Map<String, Object>> buckets;
private int docCountErrorUpperBound;
private int sumOtherDocCount;
}
Если посмотреть на представление JSON, которое выглядит так:
{
"aggregations": {
"categories": {
"buckets": [
{
"doc_count": 12,
"key": "IT",
"sub_categories": {
"buckets": [
{
"doc_count": 12,
"key": "Programming"
}
],
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0
}
},
{
"doc_count": 1,
"key": "Handy Man",
"sub_categories": {
"buckets": [
{
"doc_count": 1,
"key": "Plumbing"
}
],
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0
}
}
],
"docCountErrorUpperBound": 0,
"sumOtherDocCount": 0
},
....
Я уверен, что могу изменитьbuckets
свойство вроде так:
package com.example.dto.search;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
import java.util.Map;
@Getter @Setter @NoArgsConstructor
public class Aggregation {
private List<Bucket> buckets;
private int docCountErrorUpperBound;
private int sumOtherDocCount;
}
с классом ведра, начинающимся как это
package com.example.dto.search;
public class Bucket {
private int docCount;
private String key;
//What do I do here for sub_categories???
}
Но, как вы можете видеть из JSON,sub_categories
ключ является проблемой, так как это динамическое имя. Это также будет иметь типBucket
, так как ведра могут быть вложены в Elasticsearch.
Любые идеи о том, как представить эти сегменты как пользовательские объекты, а не простоMap
?