使用场景:
客户端需要将实体数据同步到平台库,这里采用的是HTTP的形式,以下用户数据同步到平台库为例
1.需要导入xstream.jar
2.定义请求和响应的父类实体数据,方便后续编码
/** * 请求响应的父类对象 */ public class Generic { public Header header; }
3.定义消息头实体,用于存放请求的操作类型编码和响应类型状态码
/** * 定义请求和响应头实体属性 */ public class Header { /** 数据操作类型编码 */ public String reqCode; /** 数据响应类型编码 */ public String respCode; }
4.定义用户数据请求对象,这里需要使用到xstream的注解
/** * 请求实体对象定义 */ @XStreamAlias("Request") public class ReqUser extends Generic { /** 定义具体是请求数据 */ public ReqDataByUser data; }
6.定义用户数据响应对象,这里需要使用到xstream的注解
/** * 响应实体对象定义 */ @XStreamAlias("Response") public class RespUser extends Generic { /** 定义具体是响应数据 */ public RespDataByUser data; }
7.创建将实体对象转换为请求或响应的xml文件
public static <T extends Generic> String packReqObject(T reqObj){ XStream stream = new XStream(new DomDriver("utf-8")); stream.processAnnotations(reqObj.getClass()); String xml = stream.toXML(reqObj); xml = XMLDECLARE + xml; return xml; }
8.创建将请求或响应的xml文件转换为实体对象
public static <T extends Generic> T unpackReqObject(String reqXml, Class<T> clazz){ XStream stream = new XStream(new DomDriver("utf-8")); stream.processAnnotations(clazz); return (T) stream.fromXML(reqXml); }
9.创建请求前的数据组装
public void send() throws Exception{ ReqUser reqUser = new ReqUser(); reqUser.header = new Header(); reqUser.header.reqCode = "1001"; reqUser.data = new ReqDataByUser(); String xml = MsgUtil.packReqObject(reqUser); String responseStr = CommonService.postData("http://127.0.0.1:8080/user", xml); RespUser respUser = MsgUtil.unpackReqObject(responseStr, RespUser.class); }
10.创建发送请求和接收响应消息类
public static String postData(String url, String str) throws Exception{ URL myUrl = new URL(url); HttpURLConnection con = (HttpURLConnection)myUrl.openConnection(); con.setDoInput(true); con.setDoOutput(true); con.setRequestMethod("POST"); con.setUseCaches(false); con.setInstanceFollowRedirects(true); con.setRequestProperty("Content-Type", "text/plain"); con.setRequestProperty("charset", "utf-8"); con.connect(); DataOutputStream out = new DataOutputStream(con.getOutputStream()); out.flush(); out.close(); StringBuilder sb = new StringBuilder(); BufferedReader br = null; try{ br = new BufferedReader(new InputStreamReader(con.getInputStream())); String aLine = null; while((aLine = br.readLine()) != null){ sb.append(aLine); } }catch(Exception e){ }finally{ br.close(); } con.disconnect(); return sb.toString(); }
以上代码主要功能为客户端像服务端发送数据请求的功能
下列为服务端处理客户端发送请求的代码
1.将请求的流转换为xml字符串
/** * 将请求流中的数据转换为字符串 */ public static String converRequestData(InputStream in) throws Exception{ StringBuilder sb = new StringBuilder(); BufferedReader br = null; try{ br = new BufferedReader(new InputStreamReader(in)); String aLine = null; while((aLine = br.readLine()) != null){ sb.append(aLine); } }catch(Exception e){ }finally{ br.close(); } return sb.toString(); }
2.根据请求的消息头Header中定义的reqCode,映射对应的实体对象
private static Map<String, String> getStubMap(){ Map<String, String> stubMap = new HashMap<String, String>(); stubMap.put("1001", "org.pojo.user.request.ReqDataByUser"); return stubMap; }
3.根据传入的属性查找xml文件节点的值
private String getNodeValue(String xml, String aTag){ String ret = ""; int startIndex = xml.indexOf("<" + aTag.trim() + ">"); int endIndex = xml.indexOf("</" + aTag.trim() + ">"); if((startIndex >= 0) && (endIndex >= 0) && (startIndex + aTag.length() + 2 < endIndex)){ ret = xml.substring(startIndex + aTag.length() + 2, endIndex).trim(); } return ret; }
String reqXml = converRequestData(request.getInputStream()); // 获取Head String headerValue = getNodeValue(reqXml, "Head"); // 获取请求的类型编码 String reqCode = getNodeValue(headerValue, "reqCode"); Class clazz = null; // 判断当前的类型编码如果在Map中则实例化他,并返回 if(getStubMap().containsKey(reqCode)){ String classPath = getStubMap().get(reqCode); clazz = Class.forName(classPath); } // 将请求的xml文件转换为对应的实体对象 Generic generic = MsgUtil.unpackReqObject(reqXml, clazz); //....... 这里写具体的代码处理,将generic对象传入 // 请求完成后响应数据处理 response.setContentType("text/plain"); response.setCharacterEncoding("utf-8"); // 将结果通过打包发送到客户端 String respXml = MsgUtil.packReqObject(generic); byte[] sendBytes = respXml.getBytes("utf-8"); response.getWriter().println(new String(sendBytes)); response.getWriter().flush(); response.getWriter().close();
相关推荐
总的来说,无论是使用`HttpURLConnection`还是`HttpClient`,都能有效地将JSON数据发送到Spring服务端。选择哪种方式取决于项目需求和性能考虑。`HttpURLConnection`更轻量,适合简单场景,而`HttpClient`提供了更...
在Android应用开发中,将数据提交到服务器是常见的任务,涉及到网络通信技术。这里主要讨论两种方法:使用`HttpURLConnection`和`HttpClient`类。两者都是Android系统提供的API,用于实现HTTP请求,向服务器发送数据...
总结来说,"以实体数据发送xml,号码归属地查询"涉及到了XML序列化与反序列化、HTTP请求与响应、Web服务接口设计、数据库查询以及数据解析等多个IT领域的知识点。这些技术在现代网络应用中广泛应用,尤其是当需要跨...
这个压缩包“android使用JSON进行网络数据交换(服务端、客户端)的实现.rar”很可能是包含了一个完整的示例项目,展示如何在Android客户端与服务器之间通过JSON进行数据交互。下面我们将详细讲解这一过程中的关键知识...
创建HttpPost对象,设置请求URL,并通过setEntity方法添加请求体,可以将客户端的数据发送到服务器。 其次,Gson库是Google提供的用于序列化和反序列化Java对象到JSON的工具。序列化是将Java对象转换为JSON字符串,...
在软件开发中,经常需要将Java对象发送到服务器,以便于数据交换和处理。使用Apache HttpClient库可以轻松地实现这一功能。本文将详细介绍如何使用HttpClient发送Java对象到服务器。 为什么使用Apache HttpClient?...
总的来说,Android客户端通过HTTP POST请求将文件数据发送到服务器,Struts2服务端通过解析请求并处理文件内容来完成接收。在这个过程中,需要注意文件传输的安全性和效率,以及服务端的资源管理。理解并熟练掌握这...
在Android平台上进行文件上传是一项常见的任务,特别是在移动应用中,用户可能需要上传照片、文档等数据到服务器。本文将深入探讨如何在Android中实现批量文件上传,并结合SpringMVC服务端进行演示。我们将讨论两种...
HttpClient 3.0 特别适用于那些需要与Web服务器进行交互的应用程序,例如数据爬虫、API客户端或需要发送HTTP请求的服务端组件。 在HttpClient中,发送一个POST请求涉及以下步骤: 1. 创建HttpClient实例。 2. 设置...
在移动应用开发中,"mobile_http_xml"是一个关键的主题,它涉及到如何在移动设备上使用HTTP协议进行数据传输,并处理XML格式的数据。HTTP是互联网上应用最广泛的一种网络协议,而XML(eXtensible Markup Language)...
- 使用HttpClient库或者Java的HttpURLConnection发送HTTP请求。 - 解析响应:接收到JSON或XML后,可以使用Jackson或Gson等库进行解析。 四、容器与部署 Java Web服务通常运行在Servlet容器中,如Tomcat、Jetty等...
#### 二十、在服务端接收和发送数据 服务端通过`Socket`对象与客户端交互。 - **读取数据**:使用`InputStream`。 - **发送数据**:使用`OutputStream`。 #### 二十一、关闭服务端连接 确保正确关闭服务端连接,...
在Java中,服务端可能通过注解驱动的API来处理HTTP请求,而客户端可以使用HttpURLConnection、Apache HttpClient或者OkHttp等库来发送请求。 8. **接口设计**: 在RESTful服务中,接口设计是非常关键的。良好的...
9.8.1 设计实体类 9.8.2 基于ListView的实现 9.9 本章小结 第10章 数据存储 10.1 File(文件) 10.1.1 java.io包的方法 10.1.2 openFileInput和openFileOutput 10.1.3 从resource中的raw文件夹中读取文件 10.1.4 从...
8. **网络编程**:Java提供了丰富的API来处理网络编程,如Socket和ServerSocket类用于创建客户端和服务端连接,HTTPURLConnection用于发送HTTP请求。 9. **反射机制**:Java的反射机制允许我们在运行时动态地获取类...
在使用Apache HttpClient之前,首先需要将其添加到项目依赖中。如果你使用Maven管理项目,可以在`pom.xml`文件中添加以下依赖: ```xml <groupId>org.apache.httpcomponents <artifactId>httpclient <version>...
- 客户端访问:通过HTTP库(如Apache HttpClient或Java的HttpURLConnection)直接发送HTTP请求,获取响应。 3. WSDL与UDDI: 在SOAP Web服务中,WSDL(Web Services Description Language)是XML格式的文档,用于...