如何在 JAVA 中 GET/POST 使用 OAuth 2.0 的资源(状态代码 415)

How to GET/POST a ressource with OAuth 2.0 in JAVA (Status Code 415)

我在 Java 中有一个 oauth 2.0 的实现,我想用 Shopware 6 API 尝试一些东西。我可以毫无问题地获得访问令牌,据我所知,我正在做所有正确的事情来请求这个 access_token 的资源。在 GET 请求的 header 中,我放置了 'Authorization Bearer' + access_token header 以及 "Content-Type"、"application/json" header。

HttpGet get = new HttpGet(resourceURL);
        get.addHeader("Content-Type", "application/json");

以后

if (isValid(accessToken)) {
                        // update the access token
                        // System.out.println("New access token: " + accessToken);
                        oauthDetails.setAccessToken(accessToken);
                        // remove the old auth header
                        get.removeHeaders(OAuthConstants.AUTHORIZATION);
                        // add the new auth header
                        get.addHeader(OAuthConstants.AUTHORIZATION,
                                getAuthorizationHeaderForAccessToken(oauthDetails.getAccessToken()));
                        get.releaseConnection();
                        response = client.execute(get);
                        code = response.getStatusLine().getStatusCode();

我总是得到的错误代码是 415。 这是完整的回复:

HttpResponseProxy{HTTP/1.1 415 Unsupported Media Type [Date: Thu, 04 Jul 2019 08:45:38 GMT, Server: Apache/2.4.25 (Debian), Cache-Control: no-cache, private, Access-Control-Allow-Origin: *, Access-Control-Allow-Methods: GET,POST,PUT,PATCH,DELETE, Access-Control-Allow-Headers: Content-Type,Authorization,sw-context-token,sw-access-key,sw-language-id,sw-version-id, sw-version-id: , sw-language-id: , sw-context-token: , x-frame-options: deny, X-Debug-Token: c1766c, X-Debug-Token-Link: http://localhost:8000/_profiler/c1766c, X-Robots-Tag: noindex, Vary: Authorization, Keep-Alive: timeout=5, max=100, Connection: Keep-Alive, Transfer-Encoding: chunked, Content-Type: application/json] ResponseEntityProxy{[Content-Type: application/json,Chunked: true]}}

我试图获取的端点是“http://localhost:8000/api/v1/category/”端点。如果我用 Insomnia/Postman 做这整件事,我会得到预期的类别信息。 有谁知道可能出了什么问题?我在这里错过了什么?

请添加以下内容header

'Accept': 'application/json'

正如 nuriselcuk 在评论中指出的那样,缺少的是 Accept header。 我添加了

post.addHeader("Accept", "application/json");

现在工作正常。