Spring, redirect to external url using POST

29,637

Solution 1

Like @stepanian said, you can't redirect with POST. But there are few workarounds:

  1. Do a simple HttpUrlConnection and use POST. After output the response stream. It works, but I had some problem with CSS.
  2. Do stuff in your controller and after redirect the result data to a fake page. This page will do automatically the POST through javascript with no user interaction (more details):

html:

<form name="myRedirectForm" action="https://processthis.com/process" method="post">
    <input name="name" type="hidden" value="xyz" />
    <input name="phone" type="hidden" value="9898989898" />
    <noscript>
        <input type="submit" value="Click here to continue" />
    </noscript>
</form>
    <script type="text/javascript">

        $(document).ready(function() {
            document.myRedirectForm.submit();
        });

    </script>

Solution 2

You can't redirect with POST. You can send a POST request using Java code with a class like HttpURLConnection within the action.

Share:
29,637
Accollativo
Author by

Accollativo

public boolean thisIsMe() { return !thisIsMe(); }

Updated on December 19, 2020

Comments

  • Accollativo
    Accollativo over 3 years

    In the following Spring 3.1 action, I've to do some stuff and add attribute to a POST request, and then redirect it to external URL through POST (I can't use GET).

    @RequestMapping(value = "/selectCUAA", method = RequestMethod.POST)
    public ModelAndView selectCUAA(@RequestParam(value="userID", required=true) String cuaa, ModelMap model) {
        //query & other...
        model.addAttribute(PARAM_NAME_USER, cuaa);
        model.addAttribute(... , ...);
        return new ModelAndView("redirect:http://www.externalURL.com/", model);
    }
    

    But with this code the GET method is used (the attributes are appended to http://www.externalURL.com/). How can I use the POST method? It's mandatory from the external URL.

  • Accollativo
    Accollativo about 8 years
    Ok, thanks, I used this example: stackoverflow.com/questions/3324717/… my Spring controller selectCUAA what should return now? I need a redirect to the new web page.
  • stepanian
    stepanian about 8 years
    You can redirect after the code-envoked POST is completed.
  • Accollativo
    Accollativo about 8 years
    Redirect with no attribute? In this way is it like calling a post and after a get, so the result will be only the last get? (the new url is a login page that need the parameter on post). However thanks, monday I will give a try
  • stepanian
    stepanian about 8 years
    You can get the response from the post and return it to the user in the get response.
  • Accollativo
    Accollativo about 8 years
    I gave a look on the internet, but I become more confused. Could you show me an example modifying my selectCUAA controller?
  • Phillip Fleischer
    Phillip Fleischer about 5 years
    here's another example that backs this up, i liked this util class github.com/keycloak/keycloak/blob/…