我正在使用RESTEasy客户端框架调用RESTful webservice。通过POST方式发送一些XML数据到服务器。我该如何完成这个操作?
有哪些神奇的注解可以使用来实现这个操作?
有哪些神奇的注解可以使用来实现这个操作?
ClientRequest request = new ClientRequest("http://url/resource/{id}");
StringBuilder sb = new StringBuilder();
sb.append("<user id=\"0\">");
sb.append(" <username>Test User</username>");
sb.append(" <email>test.user@test.com</email>");
sb.append("</user>");
String xmltext = sb.toString();
request.accept("application/xml").pathParameter("id", 1).body( MediaType.APPLICATION_XML, xmltext);
String response = request.postTarget( String.class); //get response and automatically unmarshall to a string.
//or
ClientResponse<String> response = request.post();
希望这能有所帮助, Charlie
只需按照以下简单步骤即可轻松完成
@Test
public void testPost() throws Exception {
final ClientRequest clientCreateRequest = new ClientRequest("http://localhost:9090/variables");
final MultivaluedMap<String, String> formParameters = clientCreateRequest.getFormParameters();
final String name = "postVariable";
formParameters.putSingle("name", name);
formParameters.putSingle("type", "String");
formParameters.putSingle("units", "units");
formParameters.putSingle("description", "description");
formParameters.putSingle("core", "true");
final ClientResponse<String> clientCreateResponse = clientCreateRequest.post(String.class);
assertEquals(201, clientCreateResponse.getStatus());
}
Form form = new Form();
form
.param("client_id", "Test_Client")
.param("grant_type", "password")
.param("response_type", "code")
.param("scope", "openid")
.param("redirect_uri", "some_redirect_url");
Entity<Form> entity = Entity.form(form);
ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://localhost:8080/auth/realms");
Response response = target
.request(MediaType.APPLICATION_JSON)
.header(HttpHeaders.AUTHORIZATION, authCreds)
.post(entity);
System.out.println("HTTP code: " + response.getStatus());
@Path("/path/to/service")
public interface UploadService
{
@POST
@Consumes("text/plan")
public Response uploadFile(InputStream inputStream);
}
接下来,编写一个实现此接口的服务器。它和看起来一样简单:
public class UploadServer extends Application implements UploadService
{
@Override
public Response uploadFile(InputStream inputStream)
{
// The inputStream contains the POST data
InputStream.read(...);
// Return the location of the new resource to the client:
Response.created(new URI(location)).build();
}
}
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://path/to/service");
ResteasyWebTarget rtarget = (ResteasyWebTarget)target;
UploadService uploadService = rtarget.proxy(UploadService.class);
InputStream inputStream = new FileInputStream("/tmp/myfile");
uploadService.uploadFile(inputStream);
如果您要编写与现有REST服务交互的程序,可以通过为客户端编写一个Java接口来解决问题。
URL url = new URL("http://localhost:8081/user");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/xml");
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
StringBuffer sbuffer = new StringBuffer();
sbuffer.append("<user id=\"0\">");
sbuffer.append(" <username>Test User</username>");
sbuffer.append(" <email>test.user@test.com</email>");
sbuffer.append("</user>");
OutputStream os = connection.getOutputStream();
os.write(sbuffer.toString().getBytes());
os.flush();
assertEquals(HttpURLConnection.HTTP_CREATED, connection.getResponseCode());
connection.disconnect();