Wenn Sie von einem Endpunkt zu einem anderen umleiten, können Sie den Flash-Bereich verwenden, um die Parameter an das Umleitungsziel zu erben.
Wenn Sie mit GET mit dem folgenden Controller auf / from
zugreifen, leiten Sie zu / to
um.
Während der Weiterleitungsquelle werden der "Buchname" und die "Käuferliste" in den Flash-Bereich verschoben und an das Umleitungsziel übertragen.
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.util.Arrays;
import java.util.List;
@Controller
public class DemoController {
@GetMapping(path = "/from")
public String from(RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("bookName", "Doraemon");
List<String> buyerList = Arrays.asList("Nobi", "Gouda");
redirectAttributes.addFlashAttribute("buyerList", buyerList);
return "redirect:/to";
}
@GetMapping(path = "/to")
public String to(Model model) {
System.out.println(model);
return "demo";
}
}
Wenn Sie auf / from
zugreifen, werden Sie zu / to
umgeleitet und die geerbten Parameter werden auf der Konsole angezeigt.
{bookName=Doraemon, buyerList=[Nobi,Gouda]}
Model
enthalten. Wenn Sie auf den Inhalt verweisen möchten, geben Sie den Attributnamen mit ".getAttribute" an.Stellen Sie sicher, dass Sie beim Zugriff auf / from
die Parameter erben und zu / to
umgeleitet werden.
package com.example.demo.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import java.util.Arrays;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.flash;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class DemoControllerTest {
@Autowired
MockMvc mockMvc;
@Test
public void redirectWithAttributes() throws Exception {
mockMvc.perform(get("/from"))
.andExpect(status().isFound())
.andExpect(redirectedUrl("/to"))
.andExpect(flash().attribute("bookName", "Doraemon"))
.andExpect(flash().attribute("buyerList", Arrays.asList("Nobi", "Gouda")));
}
}
andExpect ()
wie erwartet funktioniert.
--Überprüfen Sie, ob der HTTP-Status "302" mit "status (). IsFound ()" ist.FlashMap
Der Übernahmeparameter kann wie folgt mit FlashMap
abgerufen werden. Verwenden Sie diese Option, wenn Sie bestätigen möchten, dass keine zusätzlichen Parameter vorhanden sind, oder wenn Sie mit einem einfachen Zeichenfolgenausdruck keine Aussage treffen können.
@Test
public void redirectWithAttributes() throws Exception {
MvcResult mvcResult = mockMvc.perform(get("/from"))
.andExpect(status().isFound())
.andExpect(redirectedUrl("/to"))
.andReturn();
FlashMap flashMap = mvcResult.getFlashMap();
assertThat(flashMap.size()).isEqualTo(2);
assertThat(flashMap.get("bookName")).isEqualTo("Doraemon");
assertThat(flashMap.get("buyerList")).isEqualTo(Arrays.asList("Nobi", "Gouda"));