tangou

spring Jackson2ObjectMapperFactoryBean 和org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

springmvc-servlet.xml

 <mvc:annotation-driven validator="validator">
            <mvc:message-converters>
                <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter" />
                <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/plain;charset=UTF-8</value>
                            <value>text/html;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" id="MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>application/json; charset=UTF-8</value>
                            <value>application/x-www-form-urlencoded; charset=UTF-8</value>
                            <value>multipart/form-data; charset=UTF-8</value>
                        </list>
                    </property>
                    <property name="objectMapper">
                        <bean class="com.yonyou.dmsgms.framework.filter.XssObjectMappper" id="XssObjectMappper"/>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>

 

msg_vehicle.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd 
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc.xsd 
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/rabbit 
       http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">


     <beans profile="source">
       
        <bean id="jsonFactory" class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
            <property name="failOnEmptyBeans" value="false"/>
            <property name="indentOutput" value="true"/>
            <property name="dateFormat">
                <bean class="java.text.SimpleDateFormat">
                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/>
                </bean>
            </property>
            <property name="featuresToDisable">
                <array>
                    <value type="com.fasterxml.jackson.databind.DeserializationFeature">FAIL_ON_UNKNOWN_PROPERTIES</value>
                </array>
            </property>
        </bean>
        
        <bean class="com.yonyou.f4.common.msg.impl.TopicProducerImpl" init-method="init">
            <property name="connectionFactory" ref="rabbitmq_cf"/>
            <property name="objectMapper" ref="jsonFactory"/>
            <property name="topics">
                <set>
                   <value>topic.dms.vehicle</value>
                   <value>dcs.interface</value>
                   <value>dcs.factoryBase</value>
                </set>
            </property>
        </bean>
     </beans>
     
     <beans profile="source">
        <bean class="com.yonyou.f4.common.msg.impl.TopicConsumerImpl" init-method="init" destroy-method="destroy">
            <property name="connectionFactory" ref="rabbitmq_cf"/>
            <property name="objectMapper" ref="jsonFactory"/>
            <property name="maxThreads" value="10"/>
            <property name="queues">
                <map>
                    <entry key="test.dms.vehicle">
                        <map>
                            <entry key="dcs.factoryBase" value="dcs.factoryBase.pdiCheck"/>
                            <entry key="dcs.interface" value="dcs.intf.vehicle;dcs.intf.vehBack;dcs.intf.vehicle.test"/>
                            <entry key="topic.dms.vehicle" value="dms.testdate"/>
                        </map>
                    </entry>
                </map>
            </property>
            
            <property name="handlers">
                <map>
                    <entry key="dcs.factoryBase.pdiCheck">
                        <bean class="com.yonyou.dmsgms.vehicle.controller.msg.PDICheckController"/>
                    </entry>
                    <entry key="dcs.intf.vehicle">
                        <bean class="com.yonyou.dmsgms.vehicle.controller.msg.VehicleShipController"/>
                    </entry>
                    <entry key="dcs.intf.vehBack">
                        <bean class="com.yonyou.dmsgms.vehicle.controller.msg.ReturnVehicleOrderController"/>
                    </entry>
                    <entry key="dms.testdate">
                        <bean class="com.yonyou.dmsgms.vehicle.controller.msg.TestDateMsgController"/>
                    </entry>
                </map>
            </property>
        </bean>
 </beans>

</beans>

发送消息

 @RequestMapping(value = "/msg/topic/sendDate/tmtask")
    public ResponseEntity<VehShipVO> sendDate() {
        try {
            
            VehShipVO vo = new VehShipVO();
            
            Date now = new Date();
            vo.setShipDate(now);
            vo.setAscCode("test1");
            vo.setChangedAt(Long.valueOf(now.getTime()));
            topicProducer.sendMsg("topic.dms.vehicle", "dms.testdate", vo);
            return new ResponseEntity<VehShipVO>(vo, HttpStatus.OK);
        }catch (Throwable t) {
            logger.error(t.getMessage(), t);
            return new ResponseEntity<VehShipVO>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

接收消息

public class TestDateMsgController  extends TopicMsgHandler {
    private static final Logger logger = LoggerFactory.getLogger(TestDateMsgController.class);
    public int process() {
        try {
         
            Map msg = getMsgObj(Map.class);

            
            logger.debug("msg ===:" + msg);
            
            VehShipVO vo = getMsgObj(VehShipVO.class);

            logger.debug("vo date ===:" + vo.getShipDate());
        } catch (Exception e) {
            logger.error("error:" + e.getMessage(), e);
            return -1;
        }
        return 1;
    }
    
    @Override
    public Exception getException() {
        return null;
    }

}

结果:

10:48:22.997 [SimpleAsyncTaskExecutor-1] DEBUG - com.yonyou.dmsgms.vehicle.controller.msg.TestDateMsgController.process(TestDateMsgController.java:50) - msg ===:{vehVO=null, orderNo=null, ascCode=test1, shipDate=2017-08-09 10:48:22, changedAt=1502246902772, companyCode=null, companyName=null}
10:48:23.210 [SimpleAsyncTaskExecutor-1] DEBUG - com.yonyou.dmsgms.vehicle.controller.msg.TestDateMsgController.process(TestDateMsgController.java:54) - vo date ===:Wed Aug 09 10:48:22 CST 2017

10:48:23.219 [SimpleAsyncTaskExecutor-1] INFO  - com.yonyou.f4.common.msg.impl.TopicMsgListener.onMessage(TopicMsgListener.java:71) - handler:[TestDateMsgController] process [dms.testdate]#[657554f9-f996-4d6e-bdb0-b7ba5d6104ac] ===> Success.

 

fleetInfoPO.setTimestamp("ENABLE_DATE", fleetinfoVO.getEnableDate());//报备有效期

mysql数据库

 如果把msg.xml中json 日期format的注释

14:18:45.805 [SimpleAsyncTaskExecutor-1] DEBUG - com.yonyou.dmsgms.vehicle.controller.msg.TestDateMsgController.process(TestDateMsgController.java:50) - msg ===:{vehVO=null, orderNo=null, ascCode=test1, shipDate=1502259525519, changedAt=1502259525519, companyCode=null, companyName=null}
14:18:46.007 [SimpleAsyncTaskExecutor-1] DEBUG - com.yonyou.dmsgms.vehicle.controller.msg.TestDateMsgController.process(TestDateMsgController.java:54) - vo date ===:Wed Aug 09 14:18:45 CST 2017
14:18:46.020 [SimpleAsyncTaskExecutor-1] INFO - com.yonyou.f4.common.msg.impl.TopicMsgListener.onMessage(TopicMsgListener.java:71) - handler:[TestDateMsgController] process [dms.testdate]#[fc7989d7-53fc-4b73-9025-79f183af1298] ===> Success.

试验结果:发出的消息是long型的日期,收到vo的date类型数据自动转换成正常的日期+时间 Wed Aug 09 14:18:45 CST 2017,且vo中date的没有加注解

 

posted on 2017-08-08 18:20  tangou  阅读(243)  评论(0)    收藏  举报

导航