[英]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.