у меня этот контроллер использует пружинную загрузку 2.1
@Controller
@AllArgsConstructor
@ControllerAdvice
public class AdminPoolsController {
@PostMapping("admin/pools/edit")
public String update(@Valid final PoolDto pool,
@RequestParam(name = "image-upload", required = false) final MultipartFile file,
final BindingResult bindingResult,
final RedirectAttributes redirectAttrs) throws IOException {
//some logic
}
@ExceptionHandler(MaxUploadSizeExceededException.class)
public String fileSizeLimitExc(
final HttpServletRequest request,
final RedirectAttributes redirectAttributes,
final MaxUploadSizeExceededException exc
) {
final Object id = request.getAttribute("id");
redirectAttributes.addFlashAttribute(
"errors",
ImmutableMap.of(
"logo",
String.format(
"File exceeded max size of %d bytes",
exc.getMaxUploadSize()
)
)
);
return "redirect:/admin/pools/edit" + (id == null ? "" : "?id=" + id.toString());
}
}
Как вы видите, у меня есть PoolDto в методе POST, у этого DTO есть id, привязка происходит через html форму
<input type="hidden" name="id" id="id" th:value="${pool.id}">
В HTML-форме я могу предоставить файл, используя тип входного файла, но этот файл имеет ограниченный размер, поэтому я ловлю MaxUploadSizeExceededException
Моя проблема в том, что HttpServletRequest внутри метода обработки ошибок не имеет никаких атрибутов запроса, в моем случае я хочу получить id из исходного запроса, но он всегда равен нулю. Как я могу поймать оригинальные атрибуты запроса, используя ExceptionHandler?