在Get和Post控制器之间传递属性,但不在URL中传递

时间:2017-10-22 21:03:46

标签: java spring spring-boot

我有一个POST控制器,它接受一个表单并根据给定的输入执行一些计算。 即 如果表单提交了两个变量a和b,则POST方法接受这两个变量并创建Integer c = a + b。 现在我想将这个Integer C传递给我的GET控制器,因为当我从我的get控制器返回模型和视图时,我需要将C作为对象传递,以便能够在我的Thymeleaf模板中使用它。

实现这一目标的最佳方法是什么? 我使用POST方法返回新的ModelAndView(“redirect:/ path”),然后GET方法映射该链接。 我不想在URL中传递变量。 我尝试使用像addFlashAttributes这样的重定向属性但是在刷新后我丢失了值,我需要保持页面中显示的值。

示例代码

@RequestMapping(value = "/user", method = RequestMethod.POST )
public ModelAndView sumValue(@Valid Sum sum, BindingResult bindingResult,RedirectAttributes redir) {
    long firstClient=compare.getId();
    long varA= compare.getA();
    long varB= compare.getB();

    Long c= varA+ varB.;

    ModelAndView modelAndView = new ModelAndView(
            "redirect:/user?firstId=" + firstClient);

    return modelAndView;
}


@RequestMapping(value = "/user", method = RequestMethod.GET, params = { "firstId" })
public ModelAndView comparison(@RequestParam(value = "firstId", required = true) String firstI) {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("firstClient", firstId);
    //here i want to add as an Object varC from the Post controller so I can use it in my thymeleaf
    return modelAndView;
}

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这里有几个选项:

  1. 您可以转发该页面。
  2. 您可以使用setAttribute将值存储在会话中,并使用getAttribute在Get-controller中获取。
  3. 您可以通过创建静态Map<Long, Long> - 类字段来模糊结果,该类字段存储为Key,时间和值作为计算结果。如果钥匙太旧,请将其取下。在运送firstClient时传输密钥。
  4. 出于安全考虑,我建议只使用第二种方法而不是第三种方法。