是否可以在HttpServletResponse.sendRedirect()中发送隐藏参数?

时间:2018-11-04 18:30:21

标签: java http spring-boot controller

我有一个带有控制器的Spring Boot API(无状态),该控制器接收POST请求,提取POST请求的参数,以通过GET将其发送到我的角度客户端。我的问题是是否可以在HttpServletResponse.sendRedirect()中发送隐藏参数?

到目前为止,我的情况是这样,但是我不想在浏览器中显示参数...

@RequestMapping(value = "/return", method = RequestMethod.POST, headers = "Accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
    @ResponseBody
    @Transactional
    public void returnData(UriComponentsBuilder uriComponentsBuilder, final HttpServletRequest request,
            final HttpServletResponse response) throws IOException {

        String parameter=request.getParameter("billCode");

        response.sendRedirect("http://localhost:4200/payment?parameterOne="+parameter);
    }

更新:

我不能使用HttpSession session = request.getSession(false);,然后再使用session.setAttribute("helloWorld", "Hello world"),因为sessionNull

非常感谢!

1 个答案:

答案 0 :(得分:2)

您可以使用HTTP响应标头,而不是在queryString中发送参数。一个例子:

@GetMapping(value="/")
public void init(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String billCode = request.getParameter("billCode");
    response.addHeader("parameterOne", billCode);
    response.sendRedirect("http://localhost:4200/payment");
}

要从请求中获取值:

String billCode = request.getHeader("parameterOne");

或者,如果您使用jQuery从Ajax中获取信息,

$.ajax({
    url:'/api/v1/payment'
}).done(function (data, textStatus, xhr) { 
    console.log(xhr.getResponseHeader('parameterOne')); 
});

希望这会有所帮助。