GET не ограничен, но браузер есть.Ваш серверный клиент, похоже, не является браузером, поэтому я бы сказал, что GET - это путь.
PS GET может получить тело (не так здорово, но POST тоже нелучшее совпадение).
Вам не нужно объединять строку и добавлять дополнительные вычисления на серверном сервере, GET может получить список отдельных строк.
ОБНОВЛЕНИЕ с примером:
@RestController
public class MyController {
@GetMapping(value = "/test")
public List<String> getTestParams(@RequestParam List<String> params) {
return params;
}
}
Тест с 3000 параметрами
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TestMyController {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void testRequestWithParamsList() {
List<String> params = new ArrayList<>();
for (int i = 0; i < 3000; i++) {
params.add(String.valueOf(i));
}
List<String> result = restTemplate.getForObject(buildUrl(params),
List.class);
assertEquals(params, result);
}
private String buildUrl(List<?> params) {
return "/test?params=" + getUrlParameter(params);
}
private String getUrlParameter(List<?> params) {
return params.stream()
.map(Object::toString)
.collect(Collectors.joining(","));
}
}
Если вы используете tomcat, вы должны также указать свойство заголовка max http в application.properties
server.max-http-header-size=30000