2016-06-21 11 views
0

Ich versuche, einen POST-Aufruf mit JSON zu einem Frühlings-Boot-App zu machen, die ich laufen werde, und ich erhalte die folgende Fehlermeldung jedes Mal, wenn ich einen Post AnrufErster JSON Beitrag in Spring-Boot arbeitet

Request method 'POST' not supported 
Hier

ist das grundlegende Layout meiner Controller,

@RestController 
public class MessagesController { 

    @RequestMapping(value = "/messages", method = RequestMethod.POST) 
    public @ResponseBody Answer processMessage(@RequestBody Message message) throws Exception{ 
     System.out.println("HERE"); 

     Answer a = new Answer(5); 

     return a; 
    } 

    @ExceptionHandler 
    void handleException(Exception e, HttpServletResponse response) throws IOException { 
     response.sendError(HttpStatus.CONFLICT.value()); 
    } 
} 

Message und Answer sind POJOs

public class Message implements Serializable{ 
    private int id; 
    private int description; 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getDescription() { 
     return description; 
    } 
    public void setDescription(String description) { 
     this.description= description; 
    } 
} 

public class Answer implements Serializable{ 
    private int answer; 

    public Answer(int answer){ 
     this.answer = answer; 
    } 

    public int getAnswer() { 
     return answer; 
    } 

    public void setAnswer(int answer) { 
     this.answer = answer; 
    } 
} 

Ich möchte in der Lage sein, JSON an meinen Controller zu senden und dann eine JSON-Nachricht zurück zu erhalten. Wie bekomme ich das zum Laufen, ohne den Fehler? Ich bin Entsendung zu http://localhost:8080/messages durch SoapUI

+4

Ich bin in der Lage um das von Ihnen gesendete Beispiel ohne Probleme anzurufen. Hier ist das Arbeitsbeispiel: [gitHub] (https://github.com/ddiehl/spring-boot-web-test) Es gab einen Kompilierungsfehler in der Nachricht POJO. Beschreibung war int, aber Getter und Setter war mit String Aufruf mit curl: 'curl -H" Content-Type: Anwendung/Json "-X POST-d '{" id ":" 1 "," descripion ": "Test message"} 'http: // localhost: 8080/messages' –

+0

Haben Sie ein benutzerdefiniertes Dispatcher-Servlet-Mapping irgendwo in der App? – luboskrnac

+0

@DanielDiehl Ihr Beispiel war sehr hilfreich! Ich habe deinen Code in meinen übersetzt und es hat funktioniert. Vielen Dank! – user906153

Antwort

1

Also das ist, was ich denke:
Die Art der Beschreibung sollte nicht String statt int?

private int description; 
public String getDescription() { 
    return description; 
} 
public void setDescription(String description) { 
    this.description= description; 
} 

Ihre Post json sollte sein: (unter der Annahme, dass id integer ist und descripion ist String)

{"id": 1, "descripion":"Test message"} 

Versuchen Sie, Ruhe Controller so drehen:

@RestController 
@RequestMapping("messages") 
public class MessagesController { 
    @RequestMapping(method = RequestMethod.POST) 
    public Answer processMessage(@RequestBody Message message) throws Exception{