1. 程式人生 > >【Java】接口開發中關於接受和發送json的相關範例

【Java】接口開發中關於接受和發送json的相關範例

actual not span data private pla doby arr oms

接受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


發送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的相關範例