处理http请求返回的json串

本文介绍了如何处理HTTP请求返回的JSON字符串,包括解析过程、常用库的使用以及错误处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

处理http返回的json串:

HttpManager httpManager = new HttpManager();
httpManager.sendHttpGetRequest(httpclient, operationUrl,
operationName);
HttpGet httpGet = new HttpGet(operationUrl);
httpGet.addHeader("Content-Type"
       "application/json;charset=UTF-8");
   org.apache.http.client.ResponseHandler handler = new BasicResponseHandler();
    String rsp = (String) httpclient.execute(httpGet, handler);
                                        JsonParser jsonParser = new JsonParser();

                                        JsonObject jsonObject = (JsonObject) jsonParser.parse(rsp);
                                        JsonObject resObj = jsonObject.get("resObj")
                                                        .getAsJsonObject();
                                        JsonArray nodeList = resObj.get("alarms").getAsJsonArray();

                                        for (int i = 0; i < nodeList.size(); i++) {

                                                JsonObject subJsonObject = nodeList.get(i)
                                                                .getAsJsonObject();
                                                Hdalm hdalm = new Hdalm(dbname, instName, check_time);
                                                hdalm.fillData(subJsonObject);

                                                socketClient.sendMsg(httpIP, httpPort, hdalm.toString()
                                                                + "\r\n");

                                        }

<think>我们使用jQuery的$.ajax方法向Servlet发送POST请求,并处理返回JSON数据。根据用户提供的Servlet代码,它期望一个名为"objectId"的参数,并且返回一个JSON字符(FileModel对象的JSON表示)。步骤:1.前端使用jQuery的$.ajax方法,设置type为'POST',url为Servlet的路径。2.设置contentType为'application/x-www-form-urlencoded;charset=UTF-8'(因为这里我们发送的是表单参数,而不是JSON体)。注意:Servlet中通过req.getParameter("objectId")获取参数,所以我们需要以表单形式发送参数。3.发送的数据:一个包含objectId的对象,例如:{objectId:"0900000000000001"}4.设置dataType为'json',这样jQuery会自动将返回的响应解析为JavaScript对象。5.在success回调函数中处理返回JSON对象。6.在error回调函数中处理错误。示例代码:假设Servlet的URL是'/ecm-sf5-cn/YourServletPath'(请根据实际修改)注意:如果前端页面与Servlet不在同一个域,可能会遇到跨域问题,需要Servlet设置CORS响应头(如:Access-Control-Allow-Origin)。前端代码示例:*/```javascript//使用jQuery发送POST请求$.ajax({url:'/ecm-sf5-cn/YourServletPath',//替换为实际的ServletURLtype:'POST',dataType:'json',//期望服务器返回JSON,jQuery会自动解析data:{objectId:'0900000000000001'//替换为实际的文档ID},success:function(response){//请求成功,response已经是解析后的JavaScript对象console.log('响应数据:',response);//根据返回的数据结构,访问属性//例如,假设返回的FileModel对象有url和name属性letviewUrl=response.url;//注意:根据你的实际返回字段,这里可能是appUrl或者其他letfileName=response.objectName;letloginUser=response.loginUserName;//在页面上显示信息或进行其他操作alert(`文件${fileName}的查看地址:${viewUrl},操作用户:${loginUser}`);},error:function(xhr,status,error){//请求失败的处理console.error('请求失败:',status,error);alert('请求失败,请查看控制台日志。');}});```说明:-由于Servlet代码中,返回JSON字符是由`JSONUtil.toJsonStr(fileModel)`生成的,因此返回JSON对象的属性名与FileModel类的字段名对应。-根据提供的Servlet代码,FileModel对象包含以下属性(根据变量名推测):appUrl:生成的查看URLobjectName:文档名称objectId:文档IDloginUserName:登录用户名以及其他可能存在的属性(如FileModel中的其他字段)注意:在success回调函数中,可以直接通过response对象的属性名来获取值。但是,请确保你了解返回JSON结构,或者查看Servlet中FileModel类的定义。如果遇到跨域问题,可以在Servlet的doPost方法中添加CORS响应头(开发环境可以暂时允许所有,生产环境应限制):```javaresp.setHeader("Access-Control-Allow-Origin","*");resp.setHeader("Access-Control-Allow-Methods","POST");```另外,注意Servlet中已经设置了响应的字符编码为UTF-8,所以前端接收中文不会乱码。如果使用原生JavaScript(不使用jQuery),可以使用XMLHttpRequest或FetchAPI实现,但jQuery方式更简洁。相关问题:§§相关问题§§1.如何解决jQueryAJAX请求中的跨域问题?2.在JavaServlet中如何正确设置CORS响应头?3.除了jQuery,还有哪些方式可以发送AJAX请求处理JSON响应?</think>### 使用 jQuery 向 Java Servlet 发起 POST 请求处理 JSON 数据 #### 完整实现步骤 ```javascript // 1. 发起POST请求 $.ajax({ url: '/ecm-sf5-cn/viewoffice', // 替换为您的Servlet路径 type: 'POST', dataType: 'json', // 声明期望JSON响应 data: { objectId: '0900000000000001' // 替换为实际文档ID }, success: function(response) { // 2. 处理成功响应 console.log('完整响应数据:', response); // 3. 解析JSON数据 const viewUrl = response.url; // 查看地址 const fileName = response.objectName; // 文件名 const loginUser = response.loginUserName; // 操作用户 // 4. 更新页面内容 $('#fileInfo').html(` <div>文档名称: ${fileName}</div> <div>操作用户: ${loginUser}</div> <a href="${viewUrl}" target="_blank">查看文档</a> `); }, error: function(xhr) { // 5. 错误处理 console.error('请求失败:', xhr.status, xhr.statusText); alert(`请求失败: ${xhr.status} ${xhr.statusText}`); } }); ``` #### 关键代码说明 1. **请求配置**: ```javascript data: { objectId: '0900000000000001' // 对应Servlet中的req.getParameter("objectId") } ``` 2. **响应处理**(基于Servlet返回的`FileModel`结构): ```javascript // 根据Servlet中的FileModel对象结构 const viewUrl = response.url; // 查看地址 const fileName = response.objectName; // 文件名 const docId = response.objectId; // 文档ID const user = response.loginUserName; // 用户名 ``` 3. **跨域处理**(如需要): ```java // 在Servlet的doPost方法开头添加 resp.setHeader("Access-Control-Allow-Origin", "*"); resp.setHeader("Access-Control-Allow-Methods", "POST"); ``` #### 响应数据结构 根据您的Servlet代码,返回JSON结构如下: ```json { "url": "http://sfcn0468.sfchina.bmw.corp:8080/...", "objectName": "文档名称.pdf", "objectId": "0900000000000001", "loginUserName": "user123", // 其他FileModel属性... } ``` #### 常见问题解决 1. **405错误**: ```java // 确保Servlet同时支持POST @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) { // 处理逻辑 } ``` 2. **中文乱码**: ```java // Servlet中设置编码 resp.setContentType("application/json; charset=UTF-8"); ``` 3. **调试技巧**: ```javascript // 查看原始响应数据 console.log('原始响应:', xhr.responseText); ``` #### 完整交互流程 ```mermaid sequenceDiagram participant 前端 as 前端(jQuery) participant Servlet as Java Servlet 前端->>Servlet: POST /viewoffice (objectId=...) activate Servlet Servlet-->>前端: JSON响应(200 OK) deactivate Servlet 前端->>前端: 解析JSON数据 前端->>前端: 更新页面内容 ``` > 通过这种方式,jQuery 可安全地向 Servlet 发送 POST 请求处理返回的结构化 JSON 数据[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值