На нашем фронте мы используем axios , которые по умолчанию сериализуют параметры массива, такие как это:
arr[]=HELLO&arr[]=WORLD
< /code>
Тем не менее, это вызвало 400 ошибок плохого запроса в нашем бэкэнд с пружинной загрузкой (tomcat).
, чтобы исправить это, мы добавили следующую конфигурацию: < /p>
Код: Выделить всё
server:
tomcat:
relaxed-query-chars: ['[', ']', '{', '}']
< /code>
После применения этой настройки все, по-видимому, работает нормально-пока мы не столкнулись с странным случаем.@Getter
@AllArgsConstructor
@ToString
@ParameterObject
public class ExampleRequestDto {
@Parameter(description = "example")
private List arr;
}
< /code>
Наш фронт отправляет запрос, подобный: < /p>
GET /api/example?arr[]=HELLO&arr[]=WORLD
< /code>
✅ ожидаемый журнал: < /h2>
ExampleRequestDto(arr=[HELLO, WORLD])
< /code>
❌ Фактический журнал: < /h2>
ExampleRequestDto(arr=[HELLO])
< /code>
присутствует только первое значение; Остальные молча игнорируют.
не было исключено или предупреждения.GET /api/example?arr=HELLO&arr=WORLD
Затем мы добавили @setter в DTO, и исходный arr [] = ... также работал правильно - все значения были связаны.
my aeption>
ol -ol. /> Почему arr [] = hello & arr [] = world требует @setter для правильного связывания, но arr = arr = arr = arr = world не так ли? Параметр Tomcat Parser? (Embedded) < /li>
Связывание с помощью @modelattribute < /li>
Журнальное ведение показывает только частичное связывание параметров с форматом [] < /li>
Механизм, но я не уверен.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ire-setter