如何构建以JSON格式提交请求的主体部分

huangapple go评论75阅读模式
英文:

How to build the body of a request in json format

问题

以下是翻译好的内容:

这是我应该调用的请求:
列出库内容
>GET https://photoslibrary.googleapis.com/v1/mediaItems
Content-type: application/json
Authorization: Bearer oauth2-token
{
"pageSize": "100",
}

这是我尝试过的方式:

public String getJSON(String url, int timeout) {
		String body1 = "{pageSize: 100,}";
		String body2 = "{\"pageSize\": \"100\",}";
		HttpURLConnection request = null;
		try {
			URL u = new URL(url);
			request = (HttpURLConnection) u.openConnection();

			request.setRequestMethod("GET");
			request.setRequestProperty("Authorization", "Bearer " + token);
			request.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

			request.setUseCaches(false);
			request.setAllowUserInteraction(false);
			request.setConnectTimeout(timeout);
			request.setReadTimeout(timeout);
			request.setRequestProperty("Content-Length", String.format(Locale.ENGLISH, "%d", body2.getBytes().length));
			OutputStream outputStream = request.getOutputStream();
			outputStream.write(body2.getBytes());
			outputStream.close();
			request.connect();
			int status = request.getResponseCode();

			switch (status) {
				case 200:
				case 201:
					BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
					StringBuilder sb = new StringBuilder();
					String line;
					while ((line = br.readLine()) != null) {
						sb.append(line+"\n");
					}
					br.close();
					return sb.toString();
			}

		} catch (MalformedURLException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		} finally {
			if (request != null) {
				try {
					request.disconnect();
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}
		}
		return null;
	}

如果我使用GET方法,会出现错误:
>java.net.ProtocolException:该方法不支持请求体:GET

我尝试过使用POST,但没有成功。

感谢您的帮助。

英文:

Here is the request I should call:
listing library contents
>GET https://photoslibrary.googleapis.com/v1/mediaItems
Content-type: application/json
Authorization: Bearer oauth2-token
{
"pageSize": "100",
}

Here's what I tried:

public String getJSON(String url, int timeout) {
		String body1 = "{pageSize: 100,}";
		String body2 = "{\"pageSize\": \"100\",}";
		HttpURLConnection request = null;
		try {
			URL u = new URL(url);
			request = (HttpURLConnection) u.openConnection();

			request.setRequestMethod("GET");
			request.setRequestProperty("Authorization", "Bearer " + token);
			request.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

			request.setUseCaches(false);
			request.setAllowUserInteraction(false);
			request.setConnectTimeout(timeout);
			request.setReadTimeout(timeout);
			request.setRequestProperty("Content-Length", String.format(Locale.ENGLISH, "%d", body2.getBytes().length));
			OutputStream outputStream = request.getOutputStream();
			outputStream.write(body2.getBytes());
			outputStream.close();
			request.connect();
			int status = request.getResponseCode();

			switch (status) {
				case 200:
				case 201:
					BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
					StringBuilder sb = new StringBuilder();
					String line;
					while ((line = br.readLine()) != null) {
						sb.append(line+"\n");
					}
					br.close();
					return sb.toString();
			}

		} catch (MalformedURLException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		} finally {
			if (request != null) {
				try {
					request.disconnect();
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}
		}
		return null;
	}

If I use the GET method I get an error:
>java.net.ProtocolException: method does not support a request body: GET

I tried with POST but without success.

Thanks for your help.

答案1

得分: 1

我认为您需要在此请求中发送一个参数

您可以尝试在Postman中使用以下查询进行此请求

https://photoslibrary.googleapis.com/v1/mediaItems?pageSize=100

并在身份验证部分传递令牌。

您可以像这样做 -

例如 
URI uri = new URIBuilder("https://photoslibrary.googleapis.com/v1/mediaItems")
.addParameter("pageSize", 100)
.build();

建议 - 使用retrofit进行网络请求,使用jackson-databind项目进行JSON转换。

英文:

I think you need to send a param along with this request

You can try this request in postman using this query

https://photoslibrary.googleapis.com/v1/mediaItems?pageSize=100

and pass the token in the authentication section.

Here you can do something like -

eg 
URI uri = new URIBuilder("https://photoslibrary.googleapis.com/v1/mediaItems")
.addParameter("pageSize", 100)
.build();

Suggestion - Use retrofit for network requests and jackson-databind project for JSON conversions.

答案2

得分: 0

我认为文档有误,应该使用POST请求而不是GET。

另外,文档中的JSON请求体存在错误:有一个不应该出现的尾逗号。请使用以下内容:

String body2 = "{\"pageSize\": \"100\"}";
英文:

I think the documentation is wrong and you're supposed to use a POST request instead of GET.

Also there is an error in the documented JSON request body: there is a trailing comma that should not be there. Use the following:

String body2 = "{\"pageSize\": \"100\"}";

huangapple
  • 本文由 发表于 2020年4月8日 02:35:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/61087034.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定