Java Jersey PUT 方法和工作客户端
Java Jersey PUT Method and working Client
我正在使用 Eclipse 开发动态 Web 应用程序。我有一个正在工作的 MySQL-数据库,它通过一个名为 'Data Access Object' (=DAO) 的 class 连接,它与 JDBC 一起工作。我想在这个数据库中创建条目。功能已准备就绪。准备就绪,我的意思是经过测试并且可以。在同一个应用程序中,我实现了 Java Jersey 的 RESTful WebService。它运作良好,我可以调用该服务,它 returns 我想要的信息。但现在我的问题是:
如何发送包含 XML 的字符串?必须在 WebMethod 中解析字符串以构建和执行查询。
我的 WebService 如下所示:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
@Path("/input")
public class Input {
//DAO instance to have connection to the database.
//Not used yet.
//private DAO dao = new DAO();
@PUT
@Consumes(MediaType.TEXT_XML)
@Path("/result")
public void putIntoDAO(InputStream xml) {
String line = "";
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(xml));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sb.toString());
}
}
如您所见,我尝试将传入的流打印到控制台。
我重复最重要的事情:
- 我知道如何解析 XML。
- 我知道我的 DAO 工作正常。
- 我知道我的 WebService 也能正常工作。
我想知道的:
- 如何将 XML-String 发送到我的网络服务?
- 如何在 PUT 方法中访问此字符串?
感谢您的关注并尽力帮助我。我什至感谢每一次尝试。
亲切的问候
L.
How do I access this String in my PUT-method?
您可以简单地编写方法以获取类型为 String
的参数,Jersey 将从传入的 XML 请求中映射它,因此:
@PUT
@Consumes(MediaType.TEXT_XML)
@Path("/result")
public void putIntoDAO(String xml) {
// ...
}
应该可以,字符串包含完整的请求正文。
How do I send an XML-String to my WebService?
这取决于您用来向服务发送请求的内容,可以是通过 HTTP 进行通信的任何内容。我假设您正在使用 Java 并坚持使用 Jersey,因此一种选择是您可以通过以下方式使用 Jersey 客户端:
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/input/result");
String input = "<xml></xml>";
ClientResponse response = webResource
.type("application/xml")
.put(ClientResponse.class, input);
有关更多信息,请参阅 the Jersey Client documentation。
Ross Turner 发布的答案完全正确且有效。这是一个使用 Apache HttpComponents.
的选项
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class Runner {
public static void main(String[] args) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPut putRequest = new HttpPut("http://localhost:8080/HelloFromJersey/input/result");
StringEntity input = new StringEntity("Hello, this is a message from your put client!");
input.setContentType("text/xml");
putRequest.setEntity(input);
httpClient.execute(putRequest);
httpClient.getConnectionManager().shutdown();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
服务器打印:
Hello, this is a message from your put client!
我正在使用 Eclipse 开发动态 Web 应用程序。我有一个正在工作的 MySQL-数据库,它通过一个名为 'Data Access Object' (=DAO) 的 class 连接,它与 JDBC 一起工作。我想在这个数据库中创建条目。功能已准备就绪。准备就绪,我的意思是经过测试并且可以。在同一个应用程序中,我实现了 Java Jersey 的 RESTful WebService。它运作良好,我可以调用该服务,它 returns 我想要的信息。但现在我的问题是:
如何发送包含 XML 的字符串?必须在 WebMethod 中解析字符串以构建和执行查询。
我的 WebService 如下所示:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
@Path("/input")
public class Input {
//DAO instance to have connection to the database.
//Not used yet.
//private DAO dao = new DAO();
@PUT
@Consumes(MediaType.TEXT_XML)
@Path("/result")
public void putIntoDAO(InputStream xml) {
String line = "";
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(xml));
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(sb.toString());
}
}
如您所见,我尝试将传入的流打印到控制台。 我重复最重要的事情:
- 我知道如何解析 XML。
- 我知道我的 DAO 工作正常。
- 我知道我的 WebService 也能正常工作。
我想知道的:
- 如何将 XML-String 发送到我的网络服务?
- 如何在 PUT 方法中访问此字符串?
感谢您的关注并尽力帮助我。我什至感谢每一次尝试。
亲切的问候
L.
How do I access this String in my PUT-method?
您可以简单地编写方法以获取类型为 String
的参数,Jersey 将从传入的 XML 请求中映射它,因此:
@PUT
@Consumes(MediaType.TEXT_XML)
@Path("/result")
public void putIntoDAO(String xml) {
// ...
}
应该可以,字符串包含完整的请求正文。
How do I send an XML-String to my WebService?
这取决于您用来向服务发送请求的内容,可以是通过 HTTP 进行通信的任何内容。我假设您正在使用 Java 并坚持使用 Jersey,因此一种选择是您可以通过以下方式使用 Jersey 客户端:
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/input/result");
String input = "<xml></xml>";
ClientResponse response = webResource
.type("application/xml")
.put(ClientResponse.class, input);
有关更多信息,请参阅 the Jersey Client documentation。
Ross Turner 发布的答案完全正确且有效。这是一个使用 Apache HttpComponents.
的选项import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class Runner {
public static void main(String[] args) {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPut putRequest = new HttpPut("http://localhost:8080/HelloFromJersey/input/result");
StringEntity input = new StringEntity("Hello, this is a message from your put client!");
input.setContentType("text/xml");
putRequest.setEntity(input);
httpClient.execute(putRequest);
httpClient.getConnectionManager().shutdown();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
服务器打印:
Hello, this is a message from your put client!