客户端的java使用。在CXF Rest客户端中重置
我正在使用CXF 3.1.2开发Rest web服务和客户机,下面没有什么说明
服务:
import javax.jws.WebService;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
public class GenServiceImpl {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.TEXT_PLAIN)
@Path("/agentLogin/{ext}")
public String agentLogin(@PathParam("ext") Integer ext) {
return "EventAgentLoggedIn";
}
@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes({"application/xml", MediaType.TEXT_PLAIN})
@Path("/agentLogout")
public String agentLogout(String ext) {
return "EventAgentLoggedOut";
}
}
客户:
import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.client.WebClient;
public class TestClient {
static final String REST_URI = "http://localhost:8080/RestfulSample/Restful";
public static void main(String[] args) {
WebClient client = WebClient.create(REST_URI);
//Get
client.path("agentLogin").path(new Integer(1234)).accept(MediaType.TEXT_PLAIN);
String agentLoginResponse = client.get(String.class);
System.out.println(agentLoginResponse);
client.reset();
//Post
client.path("agentLogout").accept(MediaType.TEXT_PLAIN);
Response agentLogoutResponse = client.post("10245");
System.out.println(agentLogoutResponse.readEntity(String.class));
client.reset();
}
澄清:
在我上面的示例中,在服务类Post方法(agentLogout)中,如果替换
@Consumes({"application/xml", MediaType.TEXT_PLAIN})
,则会出现错误 具有@Consumes(MediaType.TEXT_PLAIN)
虽然它在Get方法(agentLogin)中工作得很好,但我可以知道为什么会这样吗使用
client.reset();
是正确的-在这里,我尝试使用单个WebClient来访问我的所有方法你能让我知道我在我的例子中尝试了什么是最佳实践吗?如果您能在这里纠正我的错误,我们将不胜感激
谢谢
# 1 楼答案
以下是澄清
发布时将内容类型设置为文本/普通。您可以在服务器端类中设置
@Consumes(MediaType.TEXT_PLAIN)
客户。replaceHeader(“内容类型”,MediaType.TEXT_-PLAIN)
是的,您可以使用rest方法,这里是java文档
您可以为上述服务器类创建接口(通常我将REST定义作为接口,然后实现该接口(更像SOAP方式)),该接口可以使用WADL中的WADLToJava maven插件自动生成
下面是上述服务器端rest类的示例接口
因为您没有使用spring,所以我将创建一个singleton类
您可以使用下面的代码访问其余部分