Springでredirectを利用する際、あんまりHttp Methodを意識したことがないかもしれません。ただ、何もしなければ、デフォルトでGETとなり、POSTしたいときは困ります。
 HTTP 1.1 プロトコル リファレンスに従って、ステータス コード 301 (Moved Permanently) および 302 (Found) により、リクエスト メソッドを POST から GET に変更できます。
 リクエストメソッドを POST から GET に変更することを許可したくなければ、307 (Temporary Redirect) および 308 (Permanent Redirect) ステータスコードを指定すればOKです。
@PostMapping("/redirectPostToPost")
public ModelAndView redirectPostToPost(HttpServletRequest request) {
    request.setAttribute(
      View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.TEMPORARY_REDIRECT);
    return new ModelAndView("redirect:/redirectedPostToPost");
}@PostMapping("/redirectedPostToPost")
public ModelAndView redirectedPostToPost() {
    return new ModelAndView("redirection");
}こうすれば、redirectはPOSTで送信されます。もう少しちゃんとコードを書いて検証しますと、
@RestController
@RequestMapping("app")
public class TestController {
    @PostMapping("/addCompany")
    public ModelAndView addCompany(@RequestBody Company company, HttpServletRequest request) {
        System.out.println("First method: " + company.name);
        request.setAttribute(
                View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.TEMPORARY_REDIRECT);
        return new ModelAndView("redirect:/app/postmethod/");
    }
    @PostMapping("/postmethod")
    public void getData(@RequestBody Company company) {
        System.out.println("Redirected: " + company.name);
    }
    public static class Company {
        String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}bodyに「{"name": "Test Company"}」を入れてPOSTで「http://localhost:8080/app/addCompany」に送信しますと、以下のような結果となります。
First method: Test Company Redirected: Test Company
 
  
  
  
  
コメント