From d6ba02e29e56558c71d5fcbfd2104aeaa35f4792 Mon Sep 17 00:00:00 2001 From: Niclas Thobaben Date: Tue, 15 Feb 2022 13:01:31 +0100 Subject: [PATCH] Add QueryParams to error redirect from from #5 --- .../mailrelay/ForwardMessageFormTest.java | 5 ++--- .../adapter/web/MessageFormController.java | 19 ++++++++++++++++++- .../web/MessageFormControllerTest.java | 1 - 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/integration/java/de/nclazz/service/mailrelay/ForwardMessageFormTest.java b/src/integration/java/de/nclazz/service/mailrelay/ForwardMessageFormTest.java index f3d7447..fb4adad 100644 --- a/src/integration/java/de/nclazz/service/mailrelay/ForwardMessageFormTest.java +++ b/src/integration/java/de/nclazz/service/mailrelay/ForwardMessageFormTest.java @@ -19,8 +19,7 @@ import java.util.List; import java.util.UUID; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @SpringBootTest @ActiveProfiles("integration") @@ -86,6 +85,6 @@ public class ForwardMessageFormTest { .param("onError", "http://myerrorsite.com") ) .andExpect(status().is3xxRedirection()) - .andExpect(redirectedUrl("http://myerrorsite.com")); + .andExpect(redirectedUrlPattern("http://myerrorsite.com?*")); } } diff --git a/src/main/java/de/nclazz/service/mailrelay/adapter/web/MessageFormController.java b/src/main/java/de/nclazz/service/mailrelay/adapter/web/MessageFormController.java index 0a04cdf..fdf2857 100644 --- a/src/main/java/de/nclazz/service/mailrelay/adapter/web/MessageFormController.java +++ b/src/main/java/de/nclazz/service/mailrelay/adapter/web/MessageFormController.java @@ -11,8 +11,11 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import javax.validation.Valid; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.time.Clock; import java.time.LocalDateTime; +import java.util.stream.Collectors; @Controller @Slf4j @@ -29,7 +32,7 @@ public class MessageFormController { BindingResult bindingResult) { if(bindingResult.hasErrors()) { - String onError = (form.getOnError() != null ? form.getOnError() : referer); + String onError = formatErrorRedirect(referer, form, bindingResult); return "redirect:" + onError; } @@ -47,6 +50,20 @@ public class MessageFormController { return "redirect:" + redirect; } + private String formatErrorRedirect(String referer, MessageForm form, BindingResult bindingResult) { + String queryParams = bindingResult.getAllErrors().stream() + .map(ValidationError::fromObjectError) + .map(MessageFormController::mapValidationErrorToQueryParam) + .collect(Collectors.joining("&")); + String origin = form.getOnError() != null ? form.getOnError() : referer; + + return origin + "?" + URLEncoder.encode(queryParams, StandardCharsets.UTF_8); + } + + private static String mapValidationErrorToQueryParam(ValidationError error) { + return String.format("%s=%s", error.getTarget(), error.getMessage()); + } + } diff --git a/src/test/java/de/nclazz/service/mailrelay/adapter/web/MessageFormControllerTest.java b/src/test/java/de/nclazz/service/mailrelay/adapter/web/MessageFormControllerTest.java index e9862ac..69d2fc2 100644 --- a/src/test/java/de/nclazz/service/mailrelay/adapter/web/MessageFormControllerTest.java +++ b/src/test/java/de/nclazz/service/mailrelay/adapter/web/MessageFormControllerTest.java @@ -44,5 +44,4 @@ class MessageFormControllerTest { .extracting("subject", "content", "from", "timestamp") .containsExactly("Subject", "Message", "sender@company.com", now); } - } \ No newline at end of file