Como mapear um json para enviar uma requisição post

Eu tenho o json abaixo:

{
"script": {
    "source": "ctx._source.PARAM = VALUE"
},
"query": {
    "query_string": {
        "fields": ["kpi","weekday","hour"],
        "query": "(kpi:'KPI') AND (weekday:'WEEKDAY') AND (hour:'HOUR')"
    }
}

}

Eu preciso representar essa estrutura para enviá-la numa requisição POST.

Pensei na estrutura abaixo:

Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
map.put("script", new HashMap<String, String>());
map.get("script").put("source", "ctx._source.PARAM = " + valor);
    
Map<String, Map<String, Map<String, String>>> map2 = new HashMap<String, Map<String, Map<String, String>>>();
map2.put("query", new HashMap<String, Map<String, String>>());
map2.get("query").put("query_string", new HashMap<String, String>());
map2.get("query").get("query_string").put("fields", "[\"kpi\",\"weekday\",\"hour\"]");
map2.get("query").get("query_string").put("query", "(kpi:'" + kpi +"') AND (weekday:'" + weekday +"') AND (hour:'" + hour +"')");

O problema é que desta forma a estrutura está separada em duas variáveis e eu preciso estruturar esse json em apenas uma variável.

Cria uma estrutura de dados / DTO que represente essa mesma estrutura que está no formato json, sem esses Maps confusos.

Como eu faço isso? Poderia me ajudar?

Está com dúvida sobre como criar classes em Java? Pois é só criar classes de acordo com a estrutura de dados que necessitar. O Spring serializa/desserializa um objeto java pra json (e vice-versa) automaticamente.

Abaixo um site pra ajudar a gerar classes a partir de um json:

https://json2csharp.com/json-to-pojo

Depois é só ajustar o que quiser e renomear pros nomes ficarem mais significativos.

Usa alguma biblioteca de conversão, como:

Moshi
GSON