我正在使用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";
}
答案 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令牌。