我试过了official samples。并尝试使用:
curl http://localhost:8080/wildfly-helloworld-rs/rest/ -H 'accept:application/xml'
curl http://localhost:8080/wildfly-helloworld-rs/rest/ -H 'accept:application/json'
两个请求都返回xml表示:
<xml><result>Hello World!</result></xml>
我甚至尝试添加这个:
@GET
@Path("/")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.TEXT_PLAIN)
public String getHelloWorldText() {
return helloService.createHelloMessage("World");
}
无论如何总是返回xml表示。
编辑:来自关联示例
@Path("/")
public class HelloWorld {
@Inject
HelloService helloService;
@GET
@Path("/")
@Produces({ "application/json" })
public JsonObject getHelloWorldJSON() {
return Json.createObjectBuilder()
.add("result", helloService.createHelloMessage("World"))
.build();
}
@GET
@Path("/")
@Produces({ "application/xml" })
public String getHelloWorldXML() {
return "<xml><result>" + helloService.createHelloMessage("World")
+ "</result></xml>";
}
}
public class HelloService {
String createHelloMessage(String name) {
return "Hello " + name + "!";
}
}
答案 0 :(得分:3)
与JUR-RS一样,问题与cURL不同。如果我使用-v
开关运行命令(详细),我会看到请求标题
C:\temp\jboss\quickstart\helloworld-rs>curl
-v http://localhost:8080/wildfly-helloworld-rs/rest/
-H 'accept:application/xml'
* Adding handle: conn: 0x4b6208
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x4b6208) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8080 (#0)
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /wildfly-helloworld-rs/rest/ HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8080
> Accept: */*
> 'accept:application/xml'
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
* Server WildFly/8 is not blacklisted
< Server: WildFly/8
< Content-Type: application/json
< Content-Length: 25
< Date: Sun, 23 Nov 2014 03:00:56 GMT
<
{"result":"Hello World!"}* Connection #0 to host localhost left intact
C:\temp\jboss\quickstart\helloworld-rs>
当我使用accept:application/xml
查看Accept
标题。这是*/*
(你可以看到下面的accept:application/xml
未被使用。话虽如此,当请求不明确时,就我们的资源方法而言,结果是不可预测的。对我来说,我总是得到JSON。
我不是一个很大的cURL用户,所以我不确定-H
开关应该如何工作,而且工作量不足,但对我来说'
单引号不起作用,accept
不会自动大写(应为Accept
)。
所以使用-H "Accept:application/json"
,它应该有效。使用-v
开关查看标题。