Spring Request method 'POST' not supported

Diskutiere Request method 'POST' not supported im Application Tier Forum; Hallo zusammen Ich habe ein Problem beim hinzufügen eines neuen Datenbankentrags, das dadurch entsteht, daß beim Versuch des Sendens eines...

  1. Semox
    Semox Neues Mitglied
    Hallo zusammen

    Ich habe ein Problem beim hinzufügen eines neuen Datenbankentrags, das dadurch entsteht, daß beim Versuch des Sendens eines JSON-Strings an den Controller scheitert, weil Tomcat an das Framework folgende Warnung zurückgibt:

    Code (Text):
    WARN : org.springframework.web.servlet.PageNotFound - Request method 'POST' not supported
    Das Absenden habe ich mittels Chrome über das REST-Console Plugin durchgeführt. Folgendes habe ich beim POST mitgegeben:

    Request URI: http://localhost:8080/BrainTrainer/person/add/
    Content-Type: application/json
    Payload:
    Code (Text):
    {
        "gender": "Male",
        "firstName": "Meinhard",
        "lastname": "Nasenbär",
        "birthDate": "3.9.1932",
        "totalScore": 0,
        "reactionTime": 0,
        "visits": 0
    }
    (ID wird ja automatisch vergeben. Muß ich nicht mitsenden, oder?)

    Sendeart: POST

    Das ist die Methode, die sich um das adden einer neuen Person kümmert:

    Code (Java):


    ...
    @Controller
    @RequestMapping("/person/")
    public class PersonController {

    @RequestMapping(method = RequestMethod.POST, headers = "Content-Type = application/json", value = "/person/add/")
        @ResponseBody
        public Person addPerson(@RequestBody Person person){
            logger.info("Person angelegt: " + person.toString());
            personDao.addPerson(person);
            return person;
        }
    ...
    }
     
    Durchführung der Persistenz:

    Code (Java):


    ...
    @Repository
    @Transactional
    public class PersonDao {
       
            @Transactional
        public void addPerson(Person person) {
            entityManager.merge(person);
        }
    ...
    }
     
    Das sind die Teile, die sich im das Speichern kümmern sollen. Nur kommt es niemals dazu. Muß man da irgendwas am Tomcat Plugin manipulieren (per Maven eingebunden), oder ist das ein Problem der Konfigurations-XMLs im /webapp/ Ordner? Hab was gelesen von nem Servlet Mapping, daß man da was drehen muß, aber mir geht nicht auf, was genau zu tun ist...

    Wer sich den Code ansehen will, kann sich das gesamte Projekt auf GitHub anschauen, da es öffentlich ist. Hier ist der Link zum Repo:

    https://github.com/Semo/BrainTrainer

    Danke für Eure Unterstützung.

    Viele Grüße,
    Semox
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. DerFeivel
    DerFeivel Neues Mitglied
    Hab jetzt gerade keine Zeit das nachzuvollziehen, aber müsste deine Anfrage für die hier angegebene Methode nicht

    ...Braintrainer/person/person/add

    heißen?

    Du hast ein Class-Level RequestMapping und relativ dazu dann dein Method-Level RequestMapping...
     
  4. Semox
    Semox Neues Mitglied
    Hallo DerFeivel

    Danke. Leider ist das auch nicht das Problem gewesen. Ich habe mal das relative Mapping der Methode entfernt, weil es lt. Deines Hinweises dann wirklich so sein müßte wie beschrieben, was quatsch ist.

    Trotzdem, nachdem ich auch mal verschiedene Pfade probiert hatte, kam immer nur eine 405 zurück.

    Interessanterweise gibt es einen anderen Fehler, wenn ich als Annot. ausschließlich nur
    Code (Text):
    @RequestMapping(method = RequestMethod.PUT)
    anstatt von:
    Code (Text):
    @RequestMapping(method = RequestMethod.PUT, headers = "application/json")
    benutze.

    Im ersten Code Snippet bekomme ich dann ne 415 zurück, die dann weg war, als ich als Content-Type noch application/json mitgegeben habe. Dann gab's nur noch ne 500 mit org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of de.bht.mme2.domain.Person out of START_ARRAY token.

    Ich weiß echt nicht, wie ich das Problem richtig zu lösen habe. Versucht habe ich auch Varianten im JSON, der mitgeschickt wurde. Mir fehlen da Ansätze, wegen mangelnder Erfahrung.

    Viele Grüße,
    Semox
     
  5. Semox
    Semox Neues Mitglied
    UPDATE:

    Hallo zusammen

    Ich bin ein paar Schritte nach endlosem rekursiv-beliebiger Reihenfolge Try/Error/RTFM weitergekommen. Also es gibt zwei Fehlerquellen.

    1. Ich: Fehlerhafte Rest-Pluginnutzung in Chrome
    2. Die Annotation im RequestMapping.

    Wenn ich in dieser RequestMapping das "headers=..." weglasse funktioniert das PUT. Was mir eindeutig eine SQL Abfrage bestätigt und Hibernate über die Eclipse-Konsole zurückgibt.

    Wenn ich das "headers = blabla" wieder reinnehme, bekomme ich ne 405. Das verstehe ich nicht.

    Code (Text):
    WARN : org.springframework.web.servlet.PageNotFound - Request method 'PUT' not supported
     
    Wie löst man denn nun das Problem korrekt, daß ich ganz normal einen PUT-Request an den Server absetzen kann?

    Viele Grüße,
    Semox
     
  6. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Request method 'POST' not supported - Ähnliche Themen

Handle All Requests Methode
Handle All Requests Methode im Forum Web Tier
RequestMapping: PathVariable Die Methode wird nicht aufgerufen
RequestMapping: PathVariable Die Methode wird nicht aufgerufen im Forum Application Tier
Problem mit der Methode request.getRemotePort()
Problem mit der Methode request.getRemotePort() im Forum Web Tier
init-Methode eines Servlet ausführen ohne vorherigen request
init-Methode eines Servlet ausführen ohne vorherigen request im Forum Allgemeines EE
Upload Request mittels Jersey und Multipart
Upload Request mittels Jersey und Multipart im Forum SOA
Thema: Request method 'POST' not supported