在Spring Boot中启用HTTP请求POST

我使用的是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

我意识到在Response中,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";
}

有时特别是在初始测试期间Spring的csrf - 跨站点请求伪造 - 默认情况下会启用保护并阻止POST请求发生, 临时解决方法是禁用csrf。 这通常在扩展WebSecurityConfigurerAdapter的Web安全配置类中完成

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

注意:这适用于Spring引导版本2.0.0.RC1,并且如果这不是作为永久工作使用的话,它是最好的


一个不同的解决方案为我工作。 我只需要将适当的注释添加到控制器本身,如下所示:

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

这是前一阵子,很抱歉当时没有发布答案,但我会尽力解释我认为发生了什么。

我试图用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";
}

我希望这能让答案更清楚。 谢谢阅读。

链接地址: http://www.djcxy.com/p/21457.html

上一篇: Enable HTTP Request POST in Spring Boot

下一篇: How to use SynchronizationContext with WCF