在Spring中使用其他表单数据重定向POST请求

时间:2018-05-25 22:21:03

标签: spring

我正在为Spring的Angular前端开发一个容器应用程序。我有一个模拟支付网关,我使用POST方法提交Angular表单。

@RequestMapping(path = "/pay", method = RequestMethod.POST)
public String handleMockPayment(HttpServletRequest request, HttpServletResponse response) {
    // APPEND MOCK PAYMENT STATUS CODE HERE (ResponseCode)
    // something like,
    // response.setParameter("ResponseCode", "1");

    request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.TEMPORARY_REDIRECT); // to allow redirecting POST requests

    return "redirect:/confirm";
}

在这个模拟控制器中,我需要在收到的原始数据(这是从Angular应用程序提交的表单)中附加一个额外的数据字段。此数据字段是模拟支付成功/失败代码。然后,该控制器将重定向到另一个控制器,这是我将用来处理来自支付服务器的回叫请求的真实控制器。

@RequestMapping(path = "/confirm", method = RequestMethod.POST)
public String paymentVerification(HttpServletRequest request, HttpServletResponse response) {
    String orderId = request.getParameter("OrderID");
    String responseCode = request.getParameter("ResponseCode"); // this is null

    // do some stuff with orderId and responseCode
    // ...

    return "redirect:/booking";
}

orderId可从初始表单提交中设置。但我尝试的所有方法(使用Model,FlashParams,...)都不起作用(responseCode始终为null)。

如何在此附加此新参数?

模拟支付网关的任何替代方法也受到赞赏。我的目标是将响应代码附加到现有表单数据,或者在模拟控制器(handleMockPayment)中创建具有必要模拟属性的新表单。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用.capitalize {text-transform:capitalize;} //$temp is all caps 来实现这一目标。

RedirectView

您可以使用路径变量在@RequestMapping(value = "test/{id}") public RedirectView handleMockPayment (HttpServletRequest request, HttpServletResponse response) { ... RedirectView rv = new RedirectView(); rv.setContextRelative(true); rv.setUrl("/confirm/{responseCode}"); return rv; } 中访问相同内容。