【Java】接口开发中关于接受和发送json的相关范例
接受json
package com.suneee.scn.wms.web.rocketmq; import java.util.List; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.web.context.support.WebApplicationObjectSupport; import com.suneee.scn.common.exception.ScnException;
import com.suneee.scn.message.model.MsgInfo;
import com.suneee.scn.message.receive.MsgConsumerI;
import com.suneee.scn.wms.consumer.impl.ItemMainConsumer;
import com.suneee.scn.wms.dao.ItemMainDao;
import com.suneee.scn.wms.model.dbo.Item;
import com.suneee.scn.wms.model.dbo.ItemInterDO;
import com.suneee.scn.wms.model.dbo.ItemMainDO; @Service("itemMessage")
public class ItemMessage extends WebApplicationObjectSupport implements
MsgConsumerI { private static final Logger log=LoggerFactory.getLogger(ItemMessage.class); @Autowired
private ItemMainDao itemMainDao; private static ApplicationContext applicationContext = null; public static ApplicationContext getAppContext() {
return applicationContext;
} public static Object getBean(String name) {
return applicationContext.getBean(name);
} @Override
protected void initApplicationContext(ApplicationContext context) {
super.initApplicationContext(context);
if(applicationContext == null){
applicationContext = context;
}
} @Override
public boolean dealMsg(MsgInfo msg) { log.debug("send数据已经传过来了:"+msg.getData());
//{'request': {'enterpriseid': 55,'ownerCode': 'SunEee01',
//'item': {'itemName': '熊孩子新疆无花果成品268g','itemType': 'ZC','barCode': '6924459400256',' shelfLife ': 0,'itemCode': 'xhzwhggcp_268'}}} //分解json
JSONObject jsonObject = JSONObject.fromObject(msg.getData());
String request = jsonObject.getString("request");
JSONObject itemd = JSONObject.fromObject(request);
String items = itemd.getString("item");
JSONObject item = JSONObject.fromObject(items); ItemMainDO the = new ItemMainDO();
the.setEnterpriseid(Long.valueOf(itemd.getInt("enterpriseid")));
the.setClientcode(itemd.getString("ownerCode")); the.setDescription(item.getString("itemName"));
the.setItemnumber(item.getString("itemCode"));
the.setItemtype(item.getString("itemType"));
the.setDisplayitemnumber(item.getString("barCode"));
the.setShelflife(item.getInt("shelfLife")); //获取对象
ItemMainConsumer itemMainComsumer = (ItemMainConsumer) applicationContext.getBean("itemMainConsumer"); int ok;
try {
ok = itemMainComsumer.insertItemMain(the); if(ok>0){
log.debug("商品同步成功!");
return true;
}else if(ok==-1){
log.debug("商品【"+item.getString("itemName")+"】已经存在!");
return true;
}else{
log.debug("商品同步失败!");
return false;
}
} catch (ScnException e) {
e.printStackTrace();
}
return true;
}}
注意:
String items = itemd.getString("KEY");里面的itemd必须是JSONObject。 比如:
{'request': {'enterpriseid': 55,'ownerCode': 'SunEee01','item': {'itemName': '熊孩子新疆无花果成品268g','itemType': 'ZC','barCode': '6924459400256',' shelfLife ': 0,'itemCode': 'xhzwhggcp_268'}}}
JSONObject jsonObject = JSONObject.fromObject(msg.getData());---将json的整个string字符串转为JSONObject对象 String request = jsonObject.getString("request");--提取出key为request的value
JSONObject itemd = JSONObject.fromObject(request);--将属性为string的request的value再次转为JSONObject,为了下一步再次提取下一层的value
String items = itemd.getString("item");--提取key为item的value
JSONObject item = JSONObject.fromObject(items);--将items转为JSONObject
通过item.getInt("shelfLife")或者itemd.getString("ownerCode");来提取所需的value
如果遇到多条数据为'XX':[{...},{...}]形势的以下方法处理
例如
提取到最后key为item的String字符串为"item":[{"itemName":"熊孩子新疆无花果成品268g","itemType":"ZC","barCode":"6924459400256","shelfLife ":0,"itemCode":"xhzwhggcp_268"},{"itemName":"好孩子新疆无花果成品268g","itemType":"ZC","barCode":"6924459400256","shelfLife ":1,"itemCode":"xhzwhggcp_268"}]
用下面方法先获取到value值vendorDO.getString("item")获取的值和vendorDO.getJSONArray("item")是一样的,但是前者类型为String,后者是JSONArray,为了使用后面的转换方法,必须用JSONArray格式的
JSONArray ents = vendorDO.getJSONArray("item");
List<Item> ss = (List<Item>)JSONArray.toList(ents,Item.class);---将value转成list对象
for(Item x:ss){System.out.println(x.getItemName());}---提取即可
发送json:
package com.suneee.scn.wms.web.rocketmq; import java.io.UnsupportedEncodingException;
import java.util.List; import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import com.suneee.scn.message.model.MsgInfo;
import com.suneee.scn.message.send.MQProducer;
import com.suneee.scn.message.send.MQSend;
import com.suneee.scn.wms.consumer.impl.OrderConsumer;
import com.suneee.scn.wms.model.dbo.OrderDO;
import com.suneee.scn.wms.model.dbo.OrderDetailDO;
import com.suneee.scn.wms.model.dbo.ShiplabelDO; @Controller("deliveryOrderSendController")
public class DeliveryOrderSendController {
private static final Logger log=LoggerFactory.getLogger(DeliveryOrderSendController.class); @Autowired
private MQProducer producer; @Autowired
private MQSend msgSend; @Autowired
private OrderConsumer orderConsumer; //@Scheduled(cron="0/50 * * * * ? ") //间隔5秒执行
public void taskCycle(){ log.debug("【执行定时器开始............发货单!】"); MQSend mqs = new MQSend();
mqs.setProducer(producer.getProducer());
MsgInfo mi = new MsgInfo();
mi.setTopic("WmsTopic");
mi.setType("deliveryOrderConfirm");
//----------------------------------------------------------- //1.先去sp_order_main查出ordernumber,storeordernumber,clientcode,status等属性
List<OrderDO> sodlist = orderConsumer.findOrderNumber(); //2.循环list
for(OrderDO sod:sodlist){
StringBuilder sb = new StringBuilder(); String ordernumber = sod.getOrdernumber();
String storeordernumber = sod.getStoreordernumber();
int enterpriseid = sod.getEnterpriseid(); //2.1 去shippinglabel查出barcode,carrier,weight
ShiplabelDO shiplabelDO = orderConsumer.queryShiplabelDOByOrderNumber(ordernumber);
String logisticsCode = shiplabelDO.getCarriercode();
String expressCode = shiplabelDO.getShiplabel();
Long weight = shiplabelDO.getWeight();
sb.append("{'request': {'deliveryOrder': {'enterpriseid': "+enterpriseid+",'deliveryOrderCode': ' "+storeordernumber+" ','deliveryOrderId': ' "+ordernumber+" ','warehouseCode': 'SunEee01','orderType': 'JYCK','status':'DELIVERED','outBizCode': ' "+ordernumber+" '},");
sb.append(" 'packages': {'package': {'logisticsCode': ' "+logisticsCode+" ','expressCode': ' "+expressCode+" ','weight': ' "+weight+" '}},");
sb.append(" 'orderLines': {'orderLine': [ ");
//2.2 去orderdetail查出itemnumber,qty
List<OrderDetailDO> sendlist = orderConsumer.selectDeliveryOrderSendMessage(ordernumber); for(OrderDetailDO send :sendlist){
Long actualQty = send.getQty();
String itemCode = send.getItemnumber();
String uom = send.getUom();
sb.append(" {'itemCode': ' "+itemCode+" ','actualQty': '"+actualQty+" ','unit':'"+uom+"'},");
}
sb.deleteCharAt(sb.length()-1); sb.append("]}}}");
mi.setData(sb.toString());
try {
mqs.sendMsg(mi);
log.debug("【单号为"+ordernumber+"的发货单确认接口发送成功!---发送的JSON内容为---"+sb+"】");
orderConsumer.changeOrderStatusByOrderNumber(ordernumber,enterpriseid);
log.debug("【单号为"+ordernumber+"的发货单在sp_order_main表的状态更改成功!");
} catch (UnsupportedEncodingException | MQClientException
| RemotingException | MQBrokerException | InterruptedException e) {
e.printStackTrace();
}
} //----------------------------------------------------------- }
}
注意:核心就是用StringBuilder的append方法拼接,这样的方法在复杂的多层json时比用对象包裹对象最后转json要方便的多
StringBuilder sb = new StringBuilder();
【Java】接口开发中关于接受和发送json的相关范例的更多相关文章
- 关于http接口开发中json格式数据编码问题处理
关于http接口开发中json格式数据编码问题处理 在实际工作中,接口很多时候返回json格式,但有时返回的格式会有编码问题 假设如下接口:http://service.test.com/interf ...
- 《Maven在Java项目开发中的应用》论文笔记(十七)
标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...
- Java Web开发中路径问题小结
Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...
- Java Web 开发中路径相关问题小结
Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概 ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- java web开发中常用的协议的使用和java-web 常见的缓冲技术
一.DNS协议 作用将域名解析为IP 类似于我们只需要知道中央一台,中央二台,而不需要知道它的频率,方便记忆. java dns 域名解析协议实现 1 域名解析,将域名可转换为ip地址InetAd ...
- Java Web开发中MVC设计模式简介
一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...
- Java Web开发中的名词解释
1.JVM Java虚拟机,class文件的运行时环境,就好比软件运行在操作系统一样,java要运行在JVM中才行,这也是Java之所以支持扩平台的基础. 2.Servlet/JSP 是满足一定接口需 ...
- Java应用开发中的字符集与字符编码
事出有因 在向HttpURLConnection的输出流写入内容时,因没有设置charset,导致接收方对数据的验签不一致. URL url = new URL(requestUrl); //打开连接 ...
随机推荐
- C#基础之反射
虽然还在学校读书,反射实际写的不多.但感觉反射在程序开发中用得还是挺多的,对我来说也是.NET中的一个难点.通过反射,我们可以在运行时获得.NET中的每一个类型的成员,这些类型包括类.结构.委托和枚举 ...
- 成都Uber优步司机奖励政策(4月13日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Apache入门篇(四)之LAMP架构部署
一.LAMP解析 a: apachem: mariadb, mysqlp: php, perl, python 静态资源:静态内容:客户端从服务器获得的资源的表现形式与原文件相同:动态资源:通常是程序 ...
- jQuery Validate (登录页面相关验证)
$(function() { var submit = false; var superHtml = []; /** * 匹配企业帐号,以字母开头,长度在6-20之间,只能包含字符.数字和下划线. * ...
- hive 空值、NULL判断
hive中空值判断基本分两种 (1)NULL 与 \N hive在底层数据中如何保存和标识NULL,是由 alter table name SET SERDEPROPERTIES('serializa ...
- jenkins自动打包部署linux
需要用到2个插件. git parameter:用于参数化构建时选择分支. Publish Over SSH:用于上传jar包和操作tomcat 1.先在系统设置添加要连接的linux服务器,使用用户 ...
- Spring框架 之IOC容器 和AOP详解
主要分析点: 一.Spring开源框架的简介 二.Spring下IOC容器和DI(依赖注入Dependency injection) 三.Spring下面向切面编程(AOP)和事务管理配置 一.S ...
- 树形dp入门两题
题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...
- zabbix_agentd-install.sh (脚本部署zabbix_agentd服务)
原文发表于cu:2016-05-20 基于http://www.cnblogs.com/netonline/p/7406598.html(http://blog.chinaunix.net/uid-2 ...
- #Ubuntu 18.04 安装tensorflow-gpu 1.9
参考 https://tensorflow.google.cn/install/install_linux http://nvidia.com/cuda http://developer.nvidia ...