在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