Java 如何在restfulspringmvc控制器中正确重定向

Java 如何在restfulspringmvc控制器中正确重定向,java,spring,spring-mvc,Java,Spring,Spring Mvc,当我尝试将PUT请求发送到控制器的处理程序时,所有操作都正常 @RequestMapping(method = RequestMethod.PUT, consumes = "application/json", headers = "content-type=application/json") public String updateCompany(@RequestBody Company company) { compa

当我尝试将PUT请求发送到控制器的处理程序时,所有操作都正常

@RequestMapping(method = RequestMethod.PUT,
                consumes = "application/json",
                headers = "content-type=application/json")
public String updateCompany(@RequestBody Company company) {
    companyRepository.updateCompany(company);
    return "redirect:/api/company/" + company.getId();
}
但当它重定向到另一个处理程序时

@RequestMapping(value = "/{id}", method = GET,
                produces = "application/json")
public @ResponseBody Company getCompany(@PathVariable("id") Integer id) {
    Company c = companyRepository.getCompany(id);
    return new CompanyToJsonWrapper(c);
}

我得到
HTTP状态405-请求方法“PUT”不受支持
错误。有什么办法解决吗?

我想你不想这么做。这没有道理。为什么您要放置新信息,然后重定向到GET?你的意图是什么?一旦公司更新,你会将其退回吗?如果是这样的话,为什么不从你的看跌期权中返还公司呢?否则,让您的客户端对GET进行第二次REST调用,而不是从控制器重定向。

您缺少实际调用Web服务的代码。问题可能就在那里。我怀疑客户端正在向一个Web服务发送PUT请求,该Web服务需要GET请求。是的,没错。因此,我无法更改某些标题以使用GET执行重定向?我认为此任务不可能解决:(您没有执行重定向或想要执行任何重定向,您只想使用适当的请求方法调用Web服务。在共享客户端代码之前,几乎没有人可以在这方面为您提供帮助。您确定调用的PUT方法可能是“您可以在方法中添加日志行以确保吗?”,因为一旦使用重定向,它将是GET方法,我认为您的PUT调用的URI不正确,因此会出现此错误。这样做很有意义。例如,在重定向后,用户可以点击刷新,而无需重新执行PUT请求。事实上,此PUT和重定向是处理res中PUT的唯一正确方法put创建了一个资源,如果没有重定向,客户端如何知道请求哪个资源?如果资源直接从put返回,它的id如何进入uri?