当前位置: 首页 > 知识库问答 >
问题:

Spring MVC PUT请求返回405方法不允许

方飞翼
2023-03-14

我正在使用spring mvc设置一个rest api,并且大多数配置都是通过spring boot项目自动设置的。在前端,我使用angularjs及其$HTTP模块向服务器发出获取资源的ajax请求。资源URL在my controller类中定义,但仅匹配GET URL。我试过PUT和POST,但它们分别返回405方法不允许和403禁止.

我的控制器看起来像这样

@Controller
@RequestMapping("/api/users")
public class UserController {

    @Inject
    UserService svc;

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public List<User> home() {
        return svc.findAll();
    }

    @RequestMapping(method = RequestMethod.GET, value = "/{id}")
    @ResponseBody
    public User findById(@PathVariable long id){
        return svc.findById(id);
    }

    @RequestMapping(method = RequestMethod.PUT, value="/{id}")
    @ResponseBody
    public User updateUser(@PathVariable long id, @RequestBody User user){
        Assert.isTrue(user.getId().equals(id), "User Id must match Url Id");
        return svc.updateUser(id, user);
    }

}

而对与url不匹配的服务器的请求如下所示

$http({
            url: BASE_API + 'users/' + user.id,
            method: 'PUT',
            data:user
        })

这将产生一个对localhost:8080/api/users/1的PUT请求,服务器使用405方法不允许的响应代码进行响应。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

谢谢

共有1个答案

陆宏壮
2023-03-14

看看日志(在调试时使用安全性),您就会发现问题所在。很可能您还没有禁用csrf保护,您的客户端也没有发送csrf令牌。(标准Spring Security,而不是Spring Boot,尽管如果您使用的是Boot Security autoconfig,您可以使用外部配置设置关闭csrf。)

 类似资料:
  • 我必须做一个帖子,但我得到错误405 在本网站->http://177.66.89.34:8079/transparencia/#我需要迭代页面顶部的2个下拉菜单的选项。 首先,我会在“escolha o exercício”旁边加上选项:然后,我会在“escolha a entidade”旁边加上选项: 用下面的代码,我在“EscolhaoExercício:”上面写了一篇文章 我希望在pars

  • 我制作了一个具有三个路径参数的POST web服务。 但当我尝试通过url请求此web服务时,我得到HTTP状态405-不允许使用该方法 但是同样的方法有效,如果我将Web服务更改为@GET 请求URL: 这是我得到的回应 任何帮助将不胜感激!

  • 我得到了405请求方法'GET'在app engine的文件上传过程中不受支持,但在我的本地沙箱中相同的代码运行正常 看起来像bbloservice回调请求应该是POST类型后POST/_ah/上载/...但是当我用Firebug看的时候,它是一个带有以下头的GET请求,我确实在@Controller类中定义了请求处理程序,该类具有方法类型请求方法。POST 标题 响应Headersview源允许

  • 该代码在我的本地开发环境中运行良好,但在我将其上载到服务器时,给出了一个异常。这个问题和这个问题的解决方案对我不起作用。 这是控制器。 这是routes文件中的相应条目。 这里是对URL的AJAX调用。 这就是示例测试用例的数据。 我如何克服这个错误,为什么这只发生在生产中? 值得注意的是,我在整个应用程序中还有其他对路由的AJAX调用,它们工作得很好。

  • 我有一个使用Jersey的非常简单的endpoint。我的URL是静态的,它不需要任何请求参数。看起来是这样的: 但是,每当我请求此URL时,我总是会收到一个HTTP状态代码405-方法不允许。 奇怪的是,如果我更改路径注释并定义一个路径变量,例如路径(“/图表/{blah}”),它就可以正常工作。 有人知道为什么我必须定义一个路径变量才能使其工作吗?我不需要路径变量,添加一个只是为了获得200响

  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的