перенаправление на метод POST в том же контроллере - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть пружинный RestController и я хочу перенаправить на метод POST в одном контроллере с RequestBody. приветствуется любое решение, не только перенаправление.

MyController:

@RequestMapping(value = "/addCompany", method = RequestMethod.POST)
public String addCompany(@Valid Company company, BindingResult result,
        HttpServletRequest request, Model model) throws Exception {
    //some logic
    //need to pass Company Object as RequestBody
    return "redirect:/app/postmethod/";
}

//Method to redirected
@RequestMapping(value = "/postmethod", method = {RequestMethod.POST, RequestMethod.GET})
public String getData( @RequestBody(required=false) Company compnay, HttpServletRequest request, Model model) throws Exception {
    //some logic
    //required company object
    return "htmlpage";
}

Мне нужно перенаправить мой запрос на метод /postmethod из addCompany в том же контроллере, я открыт для использования любое возможное решение.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Проверьте здесь: https://www.baeldung.com/spring-redirect-and-forward#redirecting -an-http-post-request

В соответствии со ссылкой на протокол HTTP 1.1, коды состояния 301 (окончательно перемещены) и 302 (найдено ) разрешить изменение метода запроса с POST на GET. Спецификация также определяет соответствующие коды состояния 307 (временное перенаправление) и 308 (постоянное перенаправление), которые не позволяют менять метод запроса с POST на GET.

@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");
}

Тело запроса будет пройдено. Вот пример использования вашего кода:

@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;
        }
    }
}

При использовании запроса POST к http://localhost:8080/app/addCompany с телом {"name": "Test Company"}, на выходе я получаю следующее:

First method: Test Company
Redirected: Test Company
0 голосов
/ 27 февраля 2020

Я нашел хорошее объяснение на этой странице здесь .

Для защиты пользователей от непреднамеренной (повторной) отправки транзакции POST, которую они не планировали, или отправки POST в контекст чего бы они не хотели.

Таким образом, вы можете установить данные в сеансе и использовать метод get для вызова метода post, если вы хотите это сделать.

...