From f723d2583f1016547805a89cb6532b6e511c5b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nat=C3=A1lia=20Struharov=C3=A1?= <N.Struharova@student.tudelft.nl> Date: Mon, 9 Sep 2019 16:06:40 +0200 Subject: [PATCH] Log the model when filter thymeleaf exception occurs The stacktrace from the logs in production provided inadquate information to reproduce the problem, hence we added logging of the model variables if the exception occurs. --- .gitignore | 3 +++ .../queue/controller/RequestController.java | 22 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 8db3dab47..f92bb67ff 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ log4j.properties #h2 databases *.db + +#MacOS +*.DS_Store diff --git a/src/main/java/nl/tudelft/ewi/queue/controller/RequestController.java b/src/main/java/nl/tudelft/ewi/queue/controller/RequestController.java index 7127af8cf..9d26371a3 100644 --- a/src/main/java/nl/tudelft/ewi/queue/controller/RequestController.java +++ b/src/main/java/nl/tudelft/ewi/queue/controller/RequestController.java @@ -33,6 +33,8 @@ import nl.tudelft.ewi.queue.service.RequestService; import nl.tudelft.ewi.queue.service.RequestTableService; import nl.tudelft.ewi.queue.views.View; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -45,7 +47,9 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.mvc.support.RedirectAttributes; +import org.thymeleaf.exceptions.TemplateOutputException; import com.fasterxml.jackson.annotation.JsonView; import com.google.common.collect.Lists; @@ -79,6 +83,10 @@ public class RequestController { @Autowired private RoomRepository roomRepository; + @Autowired + private ViewResolver viewResolver; + private Logger logger = LoggerFactory.getLogger(ErrorControllerAdvice.class); + @ModelAttribute("page") public static String page() { return "requests"; @@ -96,19 +104,27 @@ public class RequestController { @RequestMapping(value = "/requests", method = { RequestMethod.POST, RequestMethod.GET }) @PreAuthorize("@permissionService.canViewRequests(principal)") - public String list( HttpServletRequest httpRequest, + public void list( HttpServletRequest httpRequest, + HttpServletResponse httpServletResponse, @AuthenticatedUser User user, Model model, @RequestParam MultiValueMap<String, String> parameters, @QuerydslPredicate(root = Request.class) Predicate predicate, - @PageableDefault(sort = "id", direction = Sort.Direction.DESC, size = 25) Pageable pageable) { + @PageableDefault(sort = "id", direction = Sort.Direction.DESC, size = 25) Pageable pageable) + throws Exception { if (RequestMethod.POST.name().equals(httpRequest.getMethod())) { requestTableService.submitFilters(httpRequest, parameters, predicate); pageable = new PageRequest(0, pageable.getPageSize(), pageable.getSort()); } + org.springframework.web.servlet.View view = viewResolver.resolveViewName("request/list", Locale.US); requestTableService.fillCurrentTableModel(httpRequest, user, pageable, model); - return "request/list"; + try { + view.render(model.asMap(), httpRequest, httpServletResponse); + } catch (TemplateOutputException toe) { + logger.error("Filter exception occured.", model); + } + } @RequestMapping(value = "/requests/next/{id}", method = RequestMethod.POST) -- GitLab