是否有生成的默认类型,并在休息CXF中使用注释

时间:2015-11-05 12:29:28

标签: java web-services rest cxf cxf-client

以下是我尝试的示例:

服务方法声明:

@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 ---> LoggedOut

我的问题:

  1. 我没有配置任何类型的产品和消费服务方法(你可以看到我已经评论过它),但是它执行得很好并产生了输出 - 我可以知道它是如何可行的吗?
  2. 我们是否有生产和消费的默认类型?

1 个答案:

答案 0 :(得分:2)

默认为*/*

在服务器端   

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

在客户端  

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