2017-01-26 7 views
4

in diesem Frühjahr Boot-Anwendung Gegeben:PUT-Anfrage: Erforderlich Anfrage Körper fehlt

@SpringBootApplication 
@RestController 
public class ShowCase { 

    public static void main(String[] args) { 
     SpringApplication.run(ShowCase.class, args); 
    } 

    @RequestMapping(value = "submit", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
    public void getFormKeys(@RequestBody MultiValueMap<String, String> formData) { 
     System.out.println(formData.keySet().stream().collect(joining(","))); 
    } 

} 

Und diese curl Anfrage:

curl -X PUT -H "Content-Type: application/x-www-form-urlencoded" --data "arg1=val&arg2=val" http://localhost:8080/submit 

mit Frühlings-Boot 1.2.5 die Methode aufgerufen wird, korrekt und druckt die Formular-Schlüssel.

mit Frühlings-Boot 1.3.8 die Methode nicht aufgerufen wird, aber eine Warnung statt protokolliert:

WARN 17844 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public void web.ShowCase.getFormKeys(org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>) 

Was im Frühjahr Stiefel notwendig ist 1.3.8, so dass diese PUT-Anfrage wieder funktioniert?

Antwort

3

Fügen Sie die @EnableWebMvc Anmerkung:

@SpringBootApplication 
@RestController 
@EnableWebMvc 
public class ShowCase { 

    public static void main(String[] args) { 
     SpringApplication.run(ShowCase.class, args); 
    } 

    @RequestMapping(value = "submit", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) 
    public void getFormKeys(@RequestBody MultiValueMap<String, Object> formData) { 
     System.out.println(formData.keySet().stream().collect(Collectors.joining(","))); 
    } 

} 
+0

Es funktioniert. Gibt es einen Grund, warum diese Anmerkung jetzt benötigt wird oder was sie ändert? –

+0

Aus der Spring-Boot-Dokumentation: 'Normalerweise würden Sie @EnableWebMvc für eine Spring MVC-Anwendung hinzufügen, aber Spring Boot fügt sie automatisch hinzu, wenn spring-webmvc im Klassenpfad angezeigt wird. Dies kennzeichnet die Anwendung als Webanwendung und aktiviert Schlüsselverhalten wie das Einrichten eines DispatcherServlet.'s [Quelle: https://spring.io/guides/gs/spring-boot/] (Quelle) – oruckdeschel

+0

Ich denke, sie haben es entfernt, weil nur Verwenden Sie diese Anmerkung, wenn Sie die vollständige Kontrolle über Ihre mvc-Konfiguration übernehmen möchten, indem Sie einige durch den Spring-Boot-Modus konfigurierte Standardverhalten vermeiden. –

Verwandte Themen