【问题标题】:Spring MVC UI service form submission behind Spring Cloud ZuulSpring Cloud Zuul 背后的 Spring MVC UI 服务表单提交
【发布时间】:2016-03-09 00:11:47
【问题描述】:

问题是当表单 POST 发生然后控制器进行重定向时,似乎重定向不知道它在 Zuul 后面。

表格:

@RequestMapping(value = "/create-something", method = RequestMethod.GET)
public String getForm(Model model, @CookieValue(value = "XSRF-TOKEN", defaultValue = "none", required=true) String token) {

    model.addAttribute("title", "Create New Something");

    model.addAttribute("_csrf", token);

    return "views/create-something";

}

发布:

@RequestMapping(value = "/create-something", method = RequestMethod.POST)
public String postForm(Model model, @ModelAttribute Something something) {

    SomethingClient.createSomething(something);

    return "redirect:" + something.getName() + "/";

}

此设置将导致重定向尝试访问 UI 服务的内部 IP,而不是公共 Zuul URL。

【问题讨论】:

  • 你是如何构建这个应用程序的?我想要一个 Spring MVC 前端,与 zuul 公开的 API 对话,最好在同一个 JVM(节点)中。很好奇怎么做?
  • @tgkprog 设置起来相当简单。看看 Spring Cloud Samples,你应该有一个好的开始。

标签: spring-mvc spring-cloud netflix-zuul


【解决方案1】:

在尝试了不同的方法后,我最终选择了直接 URL。不确定是否有更好的解决方案,但这确实有效并解决了上述问题。

新帖子:

@RequestMapping(value = "/create-something", method = RequestMethod.POST)
public String postForm(Model model, @ModelAttribute Something something) {

    SomethingClient.createSomething(something);

    return "redirect:http://domain.com/ui/" + something.getName() + "/";

}

另一个想法是拦截器。这感觉就像增加了复杂性乘以大量 UI 服务。

【讨论】:

  • 有没有最好的方法呢?即使我将 zuul 和我的网络应用程序设置为使用前向标头,我也有同样的问题。
  • @DamienPolegato 另一种可能性是使用消息总线。在上面的示例中,使用域的属性可能会使这更加灵活。然后,您只需在属性文件中输入域,而无需在所有控制器中填充它。
猜你喜欢
  • 2015-07-31
  • 2017-11-21
  • 2016-09-30
  • 2015-01-18
  • 2016-10-11
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多