web-dev-qa-db-ja.com

postmanでサポートされていないメディアタイプ

私はoauth2とjwtで春のセキュリティを実装しています。以下は私のログイン機能です

_function doLogin(loginData) {

    $.ajax({
        url :  back+"/auth/secret",
        type : "POST",
        data : JSON.stringify(loginData),
        contentType : "application/json; charset=utf-8",
        dataType : "json",
        async : false,
        success : function(data, textStatus, jqXHR) {

            setJwtToken(data.token);


        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert("an unexpected error occured: " + errorThrown);
            window.location.href= back+'/login_page.html';
        }
    });
}
_

下にコントローラーがあります

_ @RequestMapping(value = "auth/secret", method = RequestMethod.POST)
    public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {
        System.out.println();
        logger.info("authentication request : " + authenticationRequest.getUsername() + " " + authenticationRequest.getPassword());
        // Perform the security
         System.out.println( authenticationRequest.getUsername()+"is the username and "+authenticationRequest.getPassword());
        final Authentication authentication = authenticationManager.authenticate(
                new UsernamePasswordAuthenticationToken(
                        authenticationRequest.getUsername(),
                        authenticationRequest.getPassword()


                        )


        );
        SecurityContextHolder.getContext().setAuthentication(authentication);

        logger.info("authentication passed");

        // Reload password post-security so we can generate token
        final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
        final String token = jwtTokenUtil.generateToken(userDetails, device);
        logger.info("token " + token);

        // Return the token
        return ResponseEntity.ok(new JwtAuthenticationResponse(token));
    }
_

しかし、郵便配達員と一緒に郵便依頼をしようとすると、

_{
  "timestamp": 1488973010828,
  "status": 415,
  "error": "Unsupported Media Type",
  "exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
  "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryY4KgeeQ9ONtKpvkQ;charset=UTF-8' not supported",
  "path": "/TaxiVis/auth/secret"
}
_

しかし、ajax呼び出しでcosole.log(data)を実行すると、トークンが出力されますか?何が間違っているのかわかりませんでした。

9
user7477092

Postmanでcontent-typeをJSON(application/json)として設定する必要があります。

POSTリクエスト内のボディに移動すると、生のオプションが表示されます。

そのすぐ横にドロップダウンがあり、JSON(application.json)を選択します。

50
Hades

Http 415 Media Unsupportedは、指定したコンテンツタイプヘッダーがアプリケーションでサポートされていない場合にのみ応答します。

POSTMANでは、送信するContent-typeヘッダーはContent type 'multipart/form-dataではなくapplication/jsonです。 ajaxコードでは、application/jsonに正しく設定しています。 POSTMANで正しいContent-typeヘッダーを渡すと、機能します。

3
ritesh.garg

また、このエラーが発生しました。XML(text/xml)に変更した後、本文内でテキストを使用していましたが、期待どおりの結果が得られました。

  • 要求がXML要求の場合は、XML(test/xml)を使用します。

  • リクエストがJSONリクエストの場合、JSON(application/json)を使用します

2