在Spring Boot中启用HTTP请求POST

时间:2014-07-09 13:36:18

标签: spring spring-mvc spring-boot

我正在使用Spring启动,这里是maven依赖

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

对于我将文件放在src / main / resources / static中的网页。我有我的html文件,js库(angular,jquery)和css文件。

我正在尝试使用Angular进行HTTP请求POST(我也有一个正常工作的GET请求)但我得到了这个

POST http://localhost:8080/xxxx/12/addEntry 405 (Method Not Allowed) 

在响应标题中

HTTP/1.1 405 Method Not Allowed
Server: Apache-Coyote/1.1
X-Application-Context: application
Allow: HEAD, GET
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 09 Jul 2014 13:04:05 GMT

我意识到在响应中,allow没有POST方法。

控制器中的方法

@RequestMapping(value = "/xxxx/{uid}/addEntry", method = RequestMethod.POST)
@ResponseBody
public String createEntry(@PathVariable String uid, @RequestBody  String form) {
    System.out.println(form);
    return "index.html";
}

4 个答案:

答案 0 :(得分:3)

有时特别是在初始测试期间,Spring的#em> csrf - 跨站点请求伪造 - 默认情况下保护启动并阻止POST请求发生,临时解决方法是禁用 csrf 。这通常在扩展WebSecurityConfigurerAdapter

的Web Security Config类中完成
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable();
    }
}

注意:这适用于 Spring启动版本2.0.0.RC1 ,如果用作永久解决方法,则效果最佳

答案 1 :(得分:2)

另一种解决方案对我有用。我只需要向控制器本身添加适当的注释,如下所示:

@RestController
public class EntriesController {
    //your code here
}

答案 2 :(得分:0)

这是一段时间以前,抱歉当时没有发布答案,但我会尝试解释我认为它发生了什么。

我试图使用Chrome Postman插件测试ajax请求,但是因为我遇到了CORS问题而无法实现(我无法使用POST方法执行ajax,因为服务器只允许我制作一个HEAD或GET请求)。

在同一台服务器中,我有角度应用程序(那是必须发出POST请求的应用程序)和Java API(那是期望POST请求的应用程序),所以,我没有CORS问题。但它没有工作,因为我犯了另一个错误,即在角度应用程序的post方法中我没有在POST上发送有效载荷数据。

@RequestMapping(value = "/xxxx/{uid}/addEntry", method = RequestMethod.POST)
@ResponseBody
public String createEntry(@PathVariable String uid, @RequestBody  String form) {
    System.out.println(form);
    return "index.html";
}

我希望这会使答案更清楚。谢谢你的阅读。

答案 3 :(得分:0)

Spring Boot默认情况下启用CSRF安全性。通过JS提交表单数据时,您需要在POST到端点时包括Spring Boot生成的_csrf令牌。