Рассмотрим следующий код в контроллере (с аннотацией @RestController и @Slf4j от lombok). ):
Код: Выделить всё
@GetMapping("/test/{id}")
public void getTest(@PathVariable Integer id) {
log.info("get test: {}", id);
}
@DeleteMapping("/test/{id}")
public void deleteTest(@PathVariable Integer id) throws InterruptedException {
TimeUnit.SECONDS.sleep(10);
log.info("delete test: {}", id);
}
@GetMapping("/test/{id}/something")
public void getTestSomething(@PathVariable Integer id) throws InterruptedException {
TimeUnit.SECONDS.sleep(10);
log.info("get test something: {}", id);
}
Кроме того, если я укажу другой идентификатор для DELETE и первого GET, GET > не дождусь. Например, DELETE /test/4, а затем GET /test/3
Еще одно интересное наблюдение: если я не использую переданную переменную пути , например просто не регистрируйте это и не передавайте никому, оно не будет ждать. То же самое происходит, если в путях не указаны переменные пути и они равны. Например: GET /test и DELETE /test
Кроме того, если я включаю @RequestParameter, проблема ожидания не возникает. Например. GET /test/3?key=value
Ожидается ли наблюдаемое мной странное поведение ожидания? Или я обнаружил какую-то странную ошибку?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ueuing-bug