Я отредактирую ответ, если найду что-то новое

аюсь выяснить, как написать хороший 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?

Ответы на вопрос(1)

Ваш ответ на вопрос