使用 POSTMAN/Rest 客户端查询 JSON REST 服务
Querying a JSON REST Service with POSTMAN/Rest Client
我有一个简单的 RESTLET 服务,其中 returns 一个 JSON 表示,如下所示:
@Override
@Post("json")
public Representation helloWorld() {
Representation representation = new JacksonRepresentation<Hello>(new Hello("Hello World"));
representation.setMediaType(MediaType.APPLICATION_JSON);
representation.
return representation;
}
当我使用 cURL 查询时,我得到了预期的响应:
{"greeting":"Hello World"}
但是,当我使用浏览器或 POSTMAN 或任何其他 Web REST 客户端时,我没有得到响应。我收到来自 POSTMAN 的回复 'Could not get any response'。
POSTMAN 请求预览为:
POST /testingrestlet/hello HTTP/1.1
Host: 127.0.0.1:6000
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 5141cd87-505c-e813-0045-3b7f4aa54144
我至少希望像 POSTMAN 这样的 REST 客户端可以工作,还是我遗漏了什么?
感谢任何帮助。
此致
我认为您应该使用 header Accept
进行内容协商 (conneg)。您的请求应该是:
POST /testingrestlet/hello HTTP/1.1
Host: 127.0.0.1:6000
Content-Type: application/json
Accept: application/json
Cache-Control: no-cache
Postman-Token: 5141cd87-505c-e813-0045-3b7f4aa54144
事实上,由于您在注释中指定了扩展名 "json",Restlet 期望此 header 是与 JSON 内容的一种可能媒体类型一起发送的。这个hint是用来select处理方法的。。。去掉扩展应该不会有这个问题,如下所述:
@Post
public Representation helloWorld() {
Representation representation
= new JacksonRepresentation<Hello>(new Hello("Hello World"));
representation.setMediaType(MediaType.APPLICATION_JSON);
(...)
return representation;
}
希望对你有帮助,
蒂埃里
在 Thierry 的评论的帮助下,问题被追溯到 Google Chrome 阻止对端口 6000 的请求,因为它认为它们不安全。该错误仅在报告 ERR_UNSAFE_PORT 错误的 Chrome 调试模式下可见。更改为更高的端口解决了问题!也可以在此处找到此错误的详细信息:https://superuser.com/questions/188006/how-to-fix-err-unsafe-port-error-on-chrome-when-browsing-to-unsafe-ports
我有一个简单的 RESTLET 服务,其中 returns 一个 JSON 表示,如下所示:
@Override
@Post("json")
public Representation helloWorld() {
Representation representation = new JacksonRepresentation<Hello>(new Hello("Hello World"));
representation.setMediaType(MediaType.APPLICATION_JSON);
representation.
return representation;
}
当我使用 cURL 查询时,我得到了预期的响应:
{"greeting":"Hello World"}
但是,当我使用浏览器或 POSTMAN 或任何其他 Web REST 客户端时,我没有得到响应。我收到来自 POSTMAN 的回复 'Could not get any response'。
POSTMAN 请求预览为:
POST /testingrestlet/hello HTTP/1.1
Host: 127.0.0.1:6000
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 5141cd87-505c-e813-0045-3b7f4aa54144
我至少希望像 POSTMAN 这样的 REST 客户端可以工作,还是我遗漏了什么?
感谢任何帮助。
此致
我认为您应该使用 header Accept
进行内容协商 (conneg)。您的请求应该是:
POST /testingrestlet/hello HTTP/1.1
Host: 127.0.0.1:6000
Content-Type: application/json
Accept: application/json
Cache-Control: no-cache
Postman-Token: 5141cd87-505c-e813-0045-3b7f4aa54144
事实上,由于您在注释中指定了扩展名 "json",Restlet 期望此 header 是与 JSON 内容的一种可能媒体类型一起发送的。这个hint是用来select处理方法的。。。去掉扩展应该不会有这个问题,如下所述:
@Post
public Representation helloWorld() {
Representation representation
= new JacksonRepresentation<Hello>(new Hello("Hello World"));
representation.setMediaType(MediaType.APPLICATION_JSON);
(...)
return representation;
}
希望对你有帮助, 蒂埃里
在 Thierry 的评论的帮助下,问题被追溯到 Google Chrome 阻止对端口 6000 的请求,因为它认为它们不安全。该错误仅在报告 ERR_UNSAFE_PORT 错误的 Chrome 调试模式下可见。更改为更高的端口解决了问题!也可以在此处找到此错误的详细信息:https://superuser.com/questions/188006/how-to-fix-err-unsafe-port-error-on-chrome-when-browsing-to-unsafe-ports