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