0

下面是我试过的例子:

服务方法声明:

@POST
//@Produces(MediaType.APPLICATION_JSON)
//@Consumes({"application/xml", MediaType.TEXT_PLAIN})
@Path("/agentLogout")
public String agentLogout(String ext) {
    JSONObject obj = new JSONObject();
    obj.put("status", "LoggedOut");
    return obj.toString();
}

客户端代码:

WebClient client = WebClient.create(REST_URI);
client.path("agentLogout").accept(MediaType.APPLICATION_JSON);
Response agentLogoutResponse = client.post("3101");
String responseStr = agentLogoutResponse.readEntity(String.class);

try {
    JSONObject json = (JSONObject)new JSONParser().parse(responseStr);
    System.out.println("3101 DN--->"+json.get("status"));
} catch (ParseException e) {
    e.printStackTrace();
}

上面的示例运行良好,并产生如下输出:

3101 DN--->注销

我的问题:

  1. 我没有在服务方法中配置生产和消费中的任何类型(如您所见,我已经对其进行了评论),但是它执行得很好并产生了输出 - 我可以知道它是如何实现的吗?
  2. 我们有生产和消费的默认类型吗?
4

1 回答 1

2

默认为*/*

在服务器端

在服务器端,如果您没有指定 Content-Type,它可以接受客户端提供的任何内容类型。但是,如果您有特定格式的 JSON、XML 等,则需要指定 Content-Type 以便 CXF 可以调用相应的提供程序。在某些情况下,如果您有相同的 REST 路径但 content-Type 不同,那么它可以根据 Content-Type 选择相应的方法。在 GET 方法中,如果 Content-Type 不匹配,它将被忽略,但在 POST 方法中,它会抛出 415 错误。

在客户端

同样适用于客户端,但是通常我们指定接受类型以防服务器可以发送多个内容类型,在这种情况下,我们指定我们可以接受的内容类型。这样服务器就可以发送指定的内容类型的数据了,一般我们在暴露 REST 的时候我们暴露的是 JSON 和 xml 类型,在这种情况下我们需要向服务器发送接受类型,以便服务器可以发送 JSON 或 XML。

于 2015-11-06T08:39:57.440 回答