我有一个简单的RESTLET服务,它返回一个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的回复'无法得到任何回复。
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客户端工作,或者我错过了什么?
任何帮助表示感谢。
此致
答案 0 :(得分:3)
我认为您应该使用标头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期望此标头与JSON内容的一种可能的媒体类型一起发送。此提示用于选择处理方法...如果删除扩展名,则不应出现此问题,如下所述:
@Post
public Representation helloWorld() {
Representation representation
= new JacksonRepresentation<Hello>(new Hello("Hello World"));
representation.setMediaType(MediaType.APPLICATION_JSON);
(...)
return representation;
}
希望它可以帮到你, 亨利
答案 1 :(得分:3)
在Thierry的评论的帮助下,该问题可以追溯到谷歌Chrome阻止对端口6000的请求,因为它认为它们不安全。该错误仅在Chrome调试模式下可见,其中报告了 ERR_UNSAFE_PORT 错误。更改为更高端口解决了问题!此错误的详细信息也可以在此处找到:https://superuser.com/questions/188006/how-to-fix-err-unsafe-port-error-on-chrome-when-browsing-to-unsafe-ports