wake-up-neo.net

HTTP-Status 415 - Die Anforderungsentität hat ein nicht unterstütztes Format

Ich arbeite an Java-restful-Webservice. Ich habe es für GET-Anfrage erhalten, aber POST Anfrage funktioniert nicht. Meine Controller-Klasse ist RestController. Ich habe das bisher gemacht:

@RequestMapping(value = "/api/signup", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public long signUp(@ModelAttribute ApiMemberModel apiMember) {
    memberService = new MemberDetailsService();
    Member m = memberService.createMember(apiMember.getUsername(), apiMember.getPassword(), apiMember.getEmail(), "");
    return m.getId();
}

Anstelle von ModelAttribute wurde auch RequestBody verwendet.

Ich verwende Postman-Erweiterung zum Senden POST Anfrage. Zum Beispiel:

{
    "username": "asd",
    "password": "sfsdg",
    "email": "[email protected]"
}

Aber ich bekomme den Fehler:

description The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

Was mache ich falsch? Modellklasse ist:

 public class ApiMemberModel {
    private String username;
    private String password;
    private String email;

    public ApiMemberModel(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
17
nope

Ich wette, dass der Anruf von Postman nicht Content-Type: application/json enthält.

HTTP 415 bedeutet, dass der Server das Medienformat der Anforderung nicht versteht. In Ihrem Controller geben Sie an, dass JSON akzeptiert wird. Sie haben jedoch nicht gesagt, ob die Anforderung darauf hinweist, dass der Körper das Format hat. Nur weil Sie die Daten im JSON-Format speichern, bedeutet dies nicht, dass der Server sie erkennt. Sie müssen sie im Header Content-Type angeben.

40
vtortola

Spring bietet viele standardmäßige HttpMessageConverters, die zur Konvertierung verwendet werden, abhängig von der Anwesenheit einer bestimmten Bibliothek im Klassenpfad des Projekts.

Wenn der Content-Type im Anforderungsheader zum Beispiel einer von application/json oder application/xml war, bedeutet dies, dass der POST -Körper json oder XML (beliebte Formate) enthält. Wenn sich die Jackson-Bibliothek in Ihrem Klassenpfad befindet, Spring delegiert die Konvertierung an MappingJackson2HttpMessageConverter [für Json] oder MappingJackson2XmlHttpMessageConverter [für XML].

Um eine Abhängigkeit zur Jackson-Bibliothek (jackson-databind) zu erklären, schließen Sie die folgende Abhängigkeit in Ihre pom.xml ein

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>
3
Pradeep

Ich hatte auch das gleiche Problem. Fügen Sie dem Postman einen Content Type-Header zu application/xml hinzu (oder was auch immer Ihr Service erwartet).

0
ABHIJITH GM

fügen Sie Ihrer XML-Datei eine "annotationsgesteuerte" Zeile hinzu oder fügen Sie den Inhaltstyp als application/json hinzu 

0
BHARATHWAJ

Ich schäme mich ein wenig, dies zu schreiben, aber ich habe vergessen, das enctype="multipart/form-data"-Attribut in das Form-Tag zu schreiben:

<form action="rest/upload_function_path" method="post" enctype="multipart/form-data">
<!-- this thing right  --------------------------------^ there! -->
    <p>
    Your file is: <input type="file" name="fajl" />
    </p>
    <input type="submit" value="Upload It" />
</form>

Dies ist ein ziemlich lahmer Fehler, aber auch der, der einige Zeit in Anspruch nahm.

0
Casper