[英]How to redirect with header use ModelAndView
我想通過一些自定義標頭從一個控制器重定向到另一個。
SpringBoot 2.1.x
@Slf4j
@RestController
@RequestMapping("test")
public class TestController {
@RequestMapping("t1")
ModelAndView t1(HttpServletRequest request, HttpServletResponse response) {
response.setHeader("token", "123");
return new ModelAndView("redirect:/test/t2");
}
@ResponseBody
@RequestMapping("t2")
String t2(HttpServletRequest request, HttpServletResponse response) {
return request.getHeader("token");
}
}
我希望t2控制器返回由t1控制器設置的請求標頭。
無需在Spring中回答ModelAndView即可進行重定向。 例如,您可以使用狀態代碼302
Response
:
@RestController
@RequestMapping("test")
public class TestController {
@RequestMapping("t1")
Response t1() {
return Response.found("/test/t2") // just double check how you create this url as it might be invalid
.header("token","123")
.build();
}
@ResponseBody
@RequestMapping("t2")
String t2(HttpServletRequest request) {
return request.getHeader("token");
}
}
但真正的問題是: 您打算如何實現?
讓用戶僅在兩次調用之間傳遞一個值,讓用戶從一個控制器跳到另一個控制器絕不是一個好主意。
如果要實現post-redirect-get-pattern:
處理重定向屬性的方法有三種:1.將Flash / model-attributes添加到RedirectAttributes 2.將請求參數(“動態”屬性)添加到RedirectAttributes 3.將請求參數(“動態”屬性)添加到RedirectView
我在以下獲取方法中結合了三種可能性。
@PostMapping("/redirectme")
public RedirectView redirectme(final RedirectAttributes redirectAttributes) {
// the following attribute is a ModelAttribute
redirectAttributes.addFlashAttribute("messageA", "A");
final RedirectView redirectView = new RedirectView("/redirectedpage", true);
// the following attributes are request-parameter (dynamic Attributes)
redirectAttributes.addAttribute("messageB", "B");
redirectView.getAttributesMap().put("messageC", "C");
return redirectView;
}
@GetMapping("/redirectedpage")
public ModelAndView redirectedPage(
// access FlashAttributes
final Model model, @ModelAttribute("messageA") final String messageA,
// access 'dynamic' Attributes
@RequestParam("messageB") final String messageB, @RequestParam("messageC") final String messageC) {
final ModelAndView modelAndView = new ModelAndView("red");
modelAndView.addObject("caption", "App");
// access FlashAttributes
modelAndView.addObject("messageA_1", model.asMap().get("messageA"));
modelAndView.addObject("messageA_2", messageA);
// access 'dynamic' Attributes
modelAndView.addObject("messageB", messageB);
modelAndView.addObject("messageC", messageC);
return modelAndView;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.