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