Ответ
Для хранения состояния, уникального для каждого HTTP-запроса, контроллеру следует назначить scope request.
Практическое применение:
Используйте аннотацию @RequestScope (Spring 5+) или @Scope("request"). Это гарантирует создание нового экземпляра бина для каждого входящего запроса, изолируя его поля от других запросов.
Пример:
@Controller
@RequestScope // Или @Scope("request")
public class RequestScopedController {
private int requestCounter;
@GetMapping("/increment")
public ResponseEntity<Integer> handleRequest() {
requestCounter++; // Это значение уникально для данного HTTP-запроса
return ResponseEntity.ok(requestCounter);
}
}
Почему это важно:
Без явного указания scope request контроллер по умолчанию будет singleton. В этом случае поле requestCounter стало бы разделяемым состоянием между всеми запросами, приводя к race condition и некорректным данным.