web-dev-qa-db-ja.com

HTTPステータス415-要求エンティティはサポートされていない形式です

私はJava安らかなWebサービスに取り組んでいます。GET要求で動作しましたが、POST要求は動作しません。私のコントローラークラスはRestController。私はこれまでにこれらを実行しました。

@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();
}

ModelAttributeの代わりにRequestBodyも試しました。

私は Postman extension を使用してPOSTリクエストを送信します。例:

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

しかし、私はエラーを受け取ります:

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

何が間違っていますか?モデルクラス:

 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;
    }
}
19
nope

Postmanからの呼び出しにはContent-Type: application/jsonが含まれていないと思います。

HTTP 415は、サーバーが要求のメディア形式を理解しないことを意味します。コントローラーでは、JSONを受け入れるように指定していますが、要求が本文がその形式であることを示しているかどうかについては言及していません。 JSON形式でデータを配置したからといって、サーバーがそれを認識しようとしているという意味ではなく、Content-Typeヘッダーで指定する必要があります。

43
vtortola

Springは、プロジェクトクラスパス内の特定のライブラリの存在に応じて、すぐに使用できる多くのデフォルトのHttpMessageConvertersを提供します。これは、変換に使用されます。

たとえば、リクエストヘッダーのContent-Typeがapplication/jsonまたはapplication/xmlのいずれかであった場合、POST body contains jsonまたはXML [Popular format]、およびJacksonライブラリがクラスパスにあるSpringは、変換をMappingJackson2HttpMessageConverter [for json]またはMappingJackson2XmlHttpMessageConverter [for XML]に委任します。

Jacksonライブラリ(jackson-databind)への依存関係を宣言するには、pom.xmlに次の依存関係を含めます

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

私も同じ問題を抱えていました。コンテンツタイプヘッダーをapplication/xml(またはurサービスが期待するもの)を郵便配達に追加します。

0
ABHIJITH GM

「注釈駆動」行をxmlファイルに追加するか、content-typeをapplication/jsonとして追加します

0
BHARATHWAJ

これを書くのは少し恥ずかしいですが、フォームタグにenctype="multipart/form-data"属性を入れるのを忘れていました。

<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>

これはかなり不完全なエラーですが、実現するまでに時間がかかりました。

0
Aleksandar