Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重定向到同一控制器中的POST方法_Java_Rest_Spring Mvc_Redirect - Fatal编程技术网

Java 重定向到同一控制器中的POST方法

Java 重定向到同一控制器中的POST方法,java,rest,spring-mvc,redirect,Java,Rest,Spring Mvc,Redirect,我有一个SpringRestController,希望重定向到与RequestBody位于同一控制器中的POST方法。 任何解决方案都欢迎,而不仅仅是重定向 MyController: @RequestMapping(value = "/addCompany", method = RequestMethod.POST) public String addCompany(@Valid Company company, BindingResult result, HttpServle

我有一个SpringRestController,希望重定向到与RequestBody位于同一控制器中的POST方法。 任何解决方案都欢迎,而不仅仅是重定向

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";
}
我需要将我的请求从同一控制器中的
addCompany
方法重定向到
/postmethod
,我愿意使用任何可行的解决方案。

检查这里:

根据HTTP 1.1协议参考,状态代码301(已移动 永久)和302(已找到)允许更改请求方法 从邮寄到领取。本规范还定义了相应的307 (临时重定向)和308(永久重定向)状态代码 不允许将请求方法从POST更改为GET

请求主体将被传递。下面是使用您的代码的示例:

@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
带有body
{“name”:“Test Company”}
,在接下来接收的输出中:

First method: Test Company
Redirected: Test Company

我在这一页上找到了一个很好的解释

用于防止用户无意中(重新)提交他们不希望的POST事务,或将POST提交到他们不希望的上下文中


因此,如果您想这样做,可以在会话中设置数据,并使用get方法调用post方法。

spring非常棒,但是如何传递数据?正确吗石荒人, 如何传递数据?这只是一个简单的电话,我已经doing@HiteshKumar是否要传递其他自定义数据?因为请求中的所有数据都已被传递是,我将如何传递Company对象?我正在用session进行测试。@HiteshKumar两种方法都有吗?你能分享你使用的代码吗?为什么你不能直接调用getData?Turo,你能在这里提供更多关于它的细节,如何使用它。谢谢,我会尝试的
First method: Test Company
Redirected: Test Company