Spring exception handler , can't access request attributes

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I have this controller using spring boot 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());
    }

}

As you see I have PoolDto in POST method , this DTO has id , binding happen through html form

<input type="hidden" name="id" id="id" th:value="${pool.id}">

In html form I can provide file using input type file , but this file is limited in size therefore I catch MaxUploadSizeExceededException My problem is , HttpServletRequest inside error handling method doesn't have any request attributes , in my case I want to get id from original request , but it is always null. How can I catch original request attributes using ExceptionHandler ?

profilepic.png
manpreet 2 years ago

If a request hits the maximum upload size, the request body is never fully processed. Instead, it is cancelled when the limit is reached. Therefore, data transmitted in the request body is not available. That is not related to Spring Boot. It's a more fundamental restriction.

To pass some ID, you basically have three options:

  1. Put the ID in the URL, e.g. admin/pool/edit/123 or admin/pool/edit?id=123

  2. Store the ID in a cookie.

  3. Store the ID in the session. The session ID is retained via a cookie.


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.