2014-07-09 17 views
7

I Frühling Boot verwendet, hier die Maven Abhängigkeitaktivieren HTTP-Request-POST im Frühjahr Boot-

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

Für die Web-Seiten, die ich bin platzieren Sie die Dateien in src/main/resources/statisch. Dort habe ich meine HTML-Dateien, js-Bibliotheken (eckig, jquery) und CSS-Dateien.

Ich versuche, ein HTTP-Request-POST mit kantigem zu machen (Ich habe auch eine GET-Anfrage, die funktionieren prima), aber ich bekomme diesen

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

In der Antwort-Header

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 

I Beachten Sie, dass in der Response das Zulassen nicht über die POST-Methode verfügt.

Das Verfahren in der Steuerung

@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

Sind Sie sicher, dass Spring den Controller sieht? Funktionieren andere Methoden von diesem Controller? – axtavt

+0

@axtavt danke für deine antwort. Die GET-Anfrage funktioniert. – agusgambina

+8

Was ist, wenn Sie versuchen, '@RequestBody String form 'zu entfernen? – axtavt

Antwort

1

Manchmal vor allem während der ersten Tests Frühlings csrf - Cross Site Request Forgery - Schutz Kicks in der Standardeinstellung und verhindert, dass POST-Requests stattfinden können , eine temporäre Problemumgehung ist csrf deaktivieren. Dies wird in der Regel in Ihrem Web Security Config-Klasse durchgeführt, die WebSecurityConfigurerAdapter

@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

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

Hinweis erweitert: Das funktioniert auf Frühling Boot-Version 2.0.0.RC1 und seine besten, wenn diese nicht als permanente Arbeit verwendet werden um

0

Die vor einiger Zeit war, sorry für zu diesem Zeitpunkt nicht die Antwort veröffentlichen, aber ich werde versuchen zu erklären, was ich vermute, es geschehen war.

Ich habe versucht, die Ajax-Anfrage mit dem Plugin von Chrome Postman zu testen, war aber nicht möglich, weil ich ein CORS-Problem habe (ich konnte den AJAX mit der POST-Methode nicht machen, weil der Server nur mir erlaubt HEAD oder GET Anfragen).

Im selben Server hatte ich die eckige Anwendung (das war die Anwendung, die die POST-Anfrage machen musste) und die Java-API (das war die Anwendung, die die POST-Anfrage erwartete), also da, hatte ich nicht ein CORS-Problem. Aber es hat nicht funktioniert, weil ich einen weiteren Fehler gemacht habe, dass in der Post-Methode der Winkelanwendung ich die Nutzlastdaten nicht auf dem POST gesendet habe.

@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"; 
} 

Ich hoffe, dies macht die Antwort klarer. Danke fürs Lesen.

+1

Sorry, aber diese Antwort erklärt nichts. –

+0

@SergDerbst Entschuldigung dafür, ich hoffe, diese Erklärung hilft – agusgambina

+0

Großartig, danke! :) –

2

Eine andere Lösung funktionierte für mich. Ich brauche nur die richtige Anmerkung an die Steuerung selbst, wie dies hinzuzufügen: Der

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