2014-07-09 45 views
7

啓用HTTP POST請求我使用Spring啓動,這裏的行家依賴在春季啓動

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

對於網頁,我把文件放在src /主/資源/靜態的。在那裏我有我的html文件,js庫(angular,jquery)和css文件。

我試圖與角的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"; 
} 
+0

你確定Spring看到控制器嗎?該控制器的其他方法是否工作? – axtavt

+0

@axtavt謝謝你的回答。 GET請求正在工作。 – agusgambina

+8

如果您嘗試刪除'@RequestBody字符串表單',該怎麼辦? – axtavt

回答

1

有時候,尤其是在初始測試Spring的CSRF - 跨站請求僞造 - 保護踢在默認情況下,防止POST請求的發生,臨時解決方法是禁用csrf。這是在一個延伸WebSecurityConfigurerAdapter

@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

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

注意您的Web安全配置類典型的做法:這個工程作爲春天引導版本2.0.0.RC1其最好的,如果這個IS NOT作爲長期工作大約

0

這是前一陣子,很抱歉沒有張貼當時的答案,但我會盡量解釋什麼,我想這件事已經發生的方法。

我試圖用Chrome郵差插件測試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"; 
} 

我希望這能讓答案更清楚。謝謝閱讀。

+1

對不起,但這個答案沒有解釋任何東西。 –

+0

@SergDerbst對不起,我希望這個解釋有幫助 – agusgambina

+0

太好了,謝謝! :) –

2

一個不同的解決方案爲我工作。我只是需要適當的註釋添加到控制器本身,就像這樣:

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