【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


发送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();
时间: 2024-10-08 10:56:07

【Java】接口开发中关于接受和发送json的相关范例的相关文章

java商城开发中说说影响java商城系统和jsp商城效率的原因

java是现在比较流行的软件开发语言,同时也是互联网应用中安全性相对较高的一种开发语言了.被很多的电子金融系统开发企业以及电子商务网站建设企业所看重.虽然说在如今的互联网开发中,它比较有优势,然而用得不当的话,反而会使电子商务网站建设的性能受到影响.电子商务网站建设企业,就从多年的java商城开发中说说影响java商城系统和jsp商城效率的原因. 1.缺乏正确的容量规划 容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求.制定合理的容量规划不仅会确保和跟踪当前IT生产能力和稳

Java Web 开发中路径相关问题小结

Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 Eclipse中目录结构如图2所示: 图2 那么针对这个站点的几个基本概念表述如下: 1. web站点的根目录:http://localhost:8080/ 2. web应用程序的的根目录:http://localhost:8080/test/ 3.同级目录:http://localhost:8080/test/articles/article1.jsp和http://

日常 java web 开发中遇到的常见问题

view 层: 问题:jsp 页面double 值过大,会变成科学计数法 第一步:引入标签 <%@ taglib prefix= "fmt" uri ="/WEB-INF/tld/fmt.tld" %> 第二步: <fmt:formatNumber value= "${变量名} " pattern="#.00"/> 2.jsp和java后台交互,通过js 转码问题 js代码:       var tes

java web开发中的奇葩事web.xml中context-param中的注释

同事提交了代码.结果除同事之外,其他人全部编译报错.报错说web.xml中配置的一个bean 没有定义.按照报错提示,各种找,无果. 由于代码全部都是提交到svn主干,之前也没有做过备份,只能一步一步删除同事提交的代码,进行还原. 奇葩事情出现了! <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:/context_entry.xml

在Android(Java)开发中如何实现类似C语言中的中断程序

在Android开发过程中,有时候会遇到这样的情况,在一个线程中,执行A操作,B操作需要等A操作结束后才进行,因此需要wait,在java中可以如下代码实现 Handler mBlueHandler = new Handler(Looper.getMainLooper()); Task task = new Task(); mBlueHandler.post(task); while (!task.finish) { synchronized (task) { try { task.wait()

java商城开发中的连接池的配置

在对java商城开发以及jsp商城的开发中,连接池的使用以及配置更为重要,为什么会如此说了,下面我们的开发人员就来带大家深入的了解一下java开发过程中的连接池. 数据库每个读写操作需要一个连接,而它的访问流程大概如下: 应用数据层向DataSource请求数据库连接 DataSource使用数据库Driver打开数据库连接 创建数据库连接,打开TCP socket 应用读/写数据库 如果该连接不再需要就关闭连接 关闭socket 容易推断出打开/关闭数据库连接是开销很大的操作.PostgreS

java web开发中,如何查看JSP和Servlet版本 (转)

原文出处:http://blog.163.com/qiu_yin_good/blog/static/16732934920123277481492/ 在看<struts2权威指南>的时候,书上很多处都提到环境要支持的JSP,Servlet版本.如果版本低,会出现异常.或者需要修改web.xml等. 现在记录下如何看自己java  web工程的JSP和servlet版本. 我的tomcat版本是7.0.26 方法:打开tomcat/lib,找到jsp-api.jar和servlet-api.ja

Java Web开发中MVC设计模式简介

一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但我们需要编写大型的web工程的话,我们现有的编写模式会造成web应用的可扩展性较差,而且一但出现问题不能准确的定位出问题出在哪里. Java是一门应用设计模式比较广泛的语言.目前主流提出的23种设计模式均可在Java语言编写的程序中所应用.目前

Java web开发中主要用到的jar包

1.Java开发中主要用到的jar包介绍:(1)java JDK基础开发包:java包和javax包.书写方式:import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.Map; 1.java.util包:集合类list/set/map等接口和实现类.calendar,date日期操作类.properties读取配置文件类.random随机数类.Timer计时器类.