На нашем фронте мы используем 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 не так? Parser? < /li>
Почему проблема молчит (т.е. без исключения или ошибки привязки), даже когда значения отсутствуют? < /li>
< /ol>
контекст < /h2>
. /> Связывание через @modelattribute < /li>
Журнальное ведение показывает только частичное связывание параметров с форматом [] < /li>
Значения перечисления являются стандартными, такими как Hello, World и т. Д. < /li>
< /ul>
. ценится.
Подробнее здесь: https://stackoverflow.com/questions/796 ... ire-setter