您的位置:首页 > 编程语言 > Java开发

spring mvc aop配置事务的相关配置

2016-04-28 08:52 471 查看

spring mvc aop配置事务的相关配置

标签:
spring mvc事务aop

2016-04-28 08:52
1226人阅读 评论(0)
收藏
举报


分类:
spring(8)

spring配置(2)


版权声明:作者:yingcang,转载需注明。 作者博客主页:http://blog.csdn.net/u014484873

一共四个配置文件包括web.xml

spring-hibernate.xml

[java]
view plain
copy





<?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:context="http://www.springframework.org/schema/context"  
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-2.5.xsd  
           http://www.springframework.org/schema/tx   
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
           http://www.springframework.org/schema/aop   
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
             http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring  
       http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd  
           ">  
  
    <!-- JNDI方式配置数据源 -->  
    <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">   
        <property name="jndiName" value="${jndiName}"></property> </bean> -->  
  
      
 <!-- <bean id="sacheService" class="com.base.service.impl.ProductInfoServiceImpl"></bean> -->  
    <!-- 配置数据源 -->  
    <bean id="dataSource" name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  
        init-method="init" destroy-method="close">  
        <property name="url" value="${jdbc_url}" />  
        <property name="username" value="${jdbc_username}" />  
        <property name="password" value="${jdbc_password}" />  
  
        <!-- 初始化连接大小 -->  
        <property name="initialSize" value="0" />  
        <!-- 连接池最大使用连接数量 -->  
        <property name="maxActive" value="20" />  
        <!-- 连接池最大空闲 -->  
        <property name="maxIdle" value="20" />  
        <!-- 连接池最小空闲 -->  
        <property name="minIdle" value="0" />  
        <!-- 获取连接最大等待时间 -->  
        <property name="maxWait" value="60000" />  
  
        <!-- <property name="poolPreparedStatements" value="true" /> <property   
            name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->  
  
        <property name="validationQuery" value="${validationQuery}" />  
        <property name="testOnBorrow" value="false" />  
        <property name="testOnReturn" value="false" />  
        <property name="testWhileIdle" value="true" />  
  
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
        <property name="timeBetweenEvictionRunsMillis" value="60000" />  
<
1b264
span>        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
        <property name="minEvictableIdleTimeMillis" value="25200000" />  
  
        <!-- 打开removeAbandoned功能 -->  
        <property name="removeAbandoned" value="true" />  
        <!-- 1800秒,也就是30分钟 -->  
        <property name="removeAbandonedTimeout" value="1800" />  
        <!-- 关闭abanded连接时输出错误日志 -->  
        <property name="logAbandoned" value="true" />  
  
        <!-- 监控数据库 -->  
        <!-- <property name="filters" value="stat" /> -->  
        <property name="filters" value="mergeStat" />  
    </bean>  
  
    <!-- 配置hibernate session工厂 -->  
    <bean id="sessionFactory"  
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <property name="hibernateProperties">  
            <props>  
                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>  
                <prop key="hibernate.dialect">com.dialect.MysqlDialect</prop>  
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>  
                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>  
            </props>  
        </property>  
  
        <!-- 自动扫描注解方式配置的hibernate类文件 -->  
        <property name="packagesToScan">  
            <list>  
                <value>com.model</value>  
            </list>  
        </property>  
  
          
    </bean>  
  
    <!-- 配置事务管理器 -->  
    <bean name="transactionManager" id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory"></property>  
    </bean>  
      
     <bean id="persistenceExceptionTranslationPostProcessor"   
       class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />  
         
    <!-- 注解方式配置事物 -->  
    <!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->  
    <context:annotation-config/>  
      
  
      
    <!-- 拦截器方式配置事物 -->  
    <!-- <tx:advice id="transactionAdvice" transaction-manager="transactionManager">  
        <tx:attributes>  
            <tx:method name="add*" rollback-for="java.lang.Exception"/>  
            <tx:method name="save*" rollback-for="java.lang.Exception"/>  
            <tx:method name="update*" rollback-for="java.lang.Exception"/>  
            <tx:method name="modify*" rollback-for="java.lang.Exception"/>  
            <tx:method name="edit*" rollback-for="java.lang.Exception"/>  
            <tx:method name="delete*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
            <tx:method name="remove*" rollback-for="java.lang.Exception"/>  
            <tx:method name="repair" rollback-for="java.lang.Exception"/>  
            <tx:method name="deleteAndRepair" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
            <tx:method name="check*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
            <tx:method name="count*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
  
            <tx:method name="get*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
            <tx:method name="find*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
            <tx:method name="load*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
            <tx:method name="search*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
            <tx:method name="datagrid*" propagation="SUPPORTS" rollback-for="java.lang.Exception"/>  
  
            <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
        </tx:attributes>  
    </tx:advice> -->  
    <bean id="aspectBean" class="com.aop.AopLog"></bean>     
   <aop:config>    
        <aop:aspect id="AopLog" ref="aspectBean">    
            <!--配置com.spring.service包下所有类或接口的所有方法-->    
            <aop:pointcut id="businessService"    
                expression="execution(* com.controller..*.*(..)) || execution(* com.base.service.impl.*.*(..))" />    
            <aop:before pointcut-ref="businessService" method="doBefore"/>    
            <aop:after pointcut-ref="businessService" method="doAfter"/>    
            <aop:around pointcut-ref="businessService" method="doAround"/>    
            <aop:after-throwing pointcut-ref="businessService" method="doThrowing" throwing="ex"/>    
        </aop:aspect>    
    </aop:config>   
     
    <!-- hiebernate中的hibernateTemplate模板方法 -->  
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">  
        <!-- 给HibernateTemplate类中注入 sessionFactory获得实例 -->  
        <property name="sessionFactory" ref="sessionFactory"></property>  
          
    </bean>  
      
    <!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->  
    <!-- <context:component-scan base-package="com.base.dao,com.base.service,com.aop" /> -->  
  
</beans>  

spring.xml

[java]
view plain
copy





<?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:context="http://www.springframework.org/schema/context"  
       xmlns:tx="http://www.springframework.org/schema/tx"  
       xmlns:aop="http://www.springframework.org/schema/aop"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
           http://www.springframework.org/schema/context  
           http://www.springframework.org/schema/context/spring-context-2.5.xsd  
           http://www.springframework.org/schema/tx   
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
           http://www.springframework.org/schema/aop   
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">  
  
    <!-- 引入属性文件 -->  
    <context:property-placeholder location="classpath:config.properties" />  
      
    <tx:annotation-driven transaction-manager="transactionManager"/>  
  
    <!-- 自动扫描dao和service包(自动注入) -->  
    <context:component-scan base-package="com.base.dao,com.base.service,com.aop" />  
    <!-- <bean class="zy.utils.DeleteTimer"></bean> -->  
</beans>  

spring3mvc-servlet.xml

[java]
view plain
copy





<?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:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd     
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd     
       http://www.springframework.org/schema/context   
       http://www.springframework.org/schema/context/spring-context-3.0.xsd  
       http://www.springframework.org/schema/aop  
       http://www.springframework.org/schema/aop/spring-aop.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
       ">  
  
    <context:annotation-config />  
  
    <context:component-scan base-package="com.controller"></context:component-scan>  
    <!-- enable the configuration of transactional behavior based on annotations -->  
  
    <!-- a PlatformTransactionManager is still required -->  
  
  
    <!-- 设置multipartResolver才能完成文件上传 -->  
    <bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <property name="maxUploadSize" value="5000000000"></property>  
        <property name="defaultEncoding" value="UTF-8" />  
    </bean>  
    <bean  
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"  
        p:prefix="/jsp/" p:suffix=".jsp" />  
    <bean id="aspectBean" class="com.aop.AopLog"></bean>  
    <aop:aspectj-autoproxy proxy-target-class="true" />  
    <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <bean class="com.jsonconvert.EageJacksonConverter" />  
            </list>  
        </property>  
    </bean>  
  
  
    <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->  
    <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->  
    <bean id="exceptionResolver"  
        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
        <property name="exceptionMappings">  
            <props>  
                <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->  
                <prop  
                    key="org.springframework.web.multipart.MaxUploadSizeExceededException">404</prop>  
            </props>  
        </property>  
    </bean>  
    <!-- <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*admin*"/>   
        <bean id="loginInterceptor" class="com.Sys.UserInterceptor"/> </mvc:interceptor>   
        <mvc:interceptor> <mvc:mapping path="/app/**"/> <bean id="appInterceptor"   
        class="com.Sys.AppInterceptor"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping   
        path="/supapp/*"/> <bean id="supappInterceptor" class="com.Sys.SupAppInterceptor"/>   
        </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/forum*/**"/> <bean   
        id="forumInterceptor" class="com.Sys.ForumInterceptor"/> </mvc:interceptor>   
        <mvc:interceptor> <mvc:mapping path="/b2c/**"/> <bean id="b2cInterceptor"   
        class="com.Sys.B2CInterceptor"/> </mvc:interceptor> </mvc:interceptors> -->  
</beans>  

web.xml

[java]
view plain
copy





<?xml version="1.0" encoding="UTF-8"?>  
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  <display-name>LANTIN</display-name>  
  <context-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>  
<span style="white-space:pre">            </span>classpath:spring/spring.xml,classpath:hibernate/spring-hibernate.xml  
<span style="white-space:pre">        </span></param-value>  
  </context-param>  
  <servlet>  
    <servlet-name>spring3mvc</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>spring3mvc</servlet-name>  
    <url-pattern>*.html</url-pattern>  
  </servlet-mapping>  
  <error-page>  
    <error-code>404</error-code>  
    <location>/error.html</location>  
  </error-page>  
  <error-page>  
    <error-code>500</error-code>  
    <location>/error.html</location>  
  </error-page>  
  <error-page>  
    <error-code>401</error-code>  
    <location>/error.html</location>  
  </error-page>  
  <error-page>  
    <error-code>403</error-code>  
    <location>/error.html</location>  
  </error-page>  
  <listener>  
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  </listener>  
<!--   <listener>  
<span style="white-space:pre">    </span>    <listener-class>com.listener.SessionListener</listener-class>  
<span style="white-space:pre">    </span></listener>  
 -->  <filter>  
    <filter-name>CharacterEncodingFilter</filter-name>  
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    <init-param>  
      <param-name>encoding</param-name>  
      <param-value>utf-8</param-value>  
    </init-param>  
  </filter>  
  <filter-mapping>  
    <filter-name>CharacterEncodingFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
  </filter-mapping>  
    
  <filter>  
<filter-name>hibernateFilter</filter-name>  
<filter-class>  
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter  
</filter-class>  
<init-param>  
    <param-name>sessionFactoryBeanName</param-name>  
    <param-value>sessionFactory</param-value>  
   </init-param>  
   <init-param>  
            <param-name>singleSession</param-name>  
            <param-value>true</param-value>             
        </init-param>  
        <init-param>  
        <param-name> flushMode </param-name>  
   <param-value>AUTO </param-value>          
        </init-param>  
</filter>  
  
  
<filter-mapping>  
<filter-name>hibernateFilter</filter-name>  
<url-pattern>/*</url-pattern>  
</filter-mapping>  
  <welcome-file-list>  
    <welcome-file>login/login.html</welcome-file>  
  </welcome-file-list>  
  <session-config>  
  <span style="white-space:pre"> </span><session-timeout>0</session-timeout>  
  </session-config>  
</web-app>  

AopLog.java

[java]
view plain
copy





package com.aop;  
  
import org.apache.log4j.Logger;  
import org.aspectj.lang.JoinPoint;  
import org.aspectj.lang.ProceedingJoinPoint;  
import org.aspectj.lang.annotation.Aspect;  
import org.springframework.stereotype.Component;  
  
  
@Aspect  
@Component  
public class AopLog {  
      
    private static final Logger logger=Logger.getLogger(AopLog.class);  
      
    //@After("execution(* com.controller.*.*(..))")  
     public void doAfter(JoinPoint jp) {    
//          System.out.println("log Ending method: "    
//                  + jp.getTarget().getClass().getName() + "."    
//                  + jp.getSignature().getName());  
            logger.info("log Ending method: "    
                    + jp.getTarget().getClass().getName() + "."    
                    + jp.getSignature().getName());  
           /* LoggerUtil.info(jp.getClass(),jp.getTarget().getClass().getName() + "."   
                    + jp.getSignature().getName()+"[logo]:normal");*/  
             
        }    
    //@Around("execution(* com.controller.*.*(..))")  
        public Object doAround(ProceedingJoinPoint pjp) throws Throwable {    
            long time = System.currentTimeMillis();    
            Object retVal = pjp.proceed();    
            time = System.currentTimeMillis() - time;    
//          System.out.println("process time: " + time + " ms");    
            logger.info("process time: " + time + " ms");  
            return retVal;    
        }    
    //@Before("execution(* com.controller.*.*(..))")  
        public void doBefore(JoinPoint jp) throws Exception {  
              
              
             logger.info("log Begining method: "    
                    + jp.getTarget().getClass().getName() + "."    
                    + jp.getSignature().getName());  
//          System.out.println("log Begining method: "    
//                  + jp.getTarget().getClass().getName() + "."    
//                  + jp.getSignature().getName());    
        }    
    //@AfterThrowing("execution(* com.controller.*.*(..))")  
        public void doThrowing(JoinPoint jp, Throwable ex) {    
//          System.out.println("method " + jp.getTarget().getClass().getName()    
//                  + "." + jp.getSignature().getName() + " throw exception");  
            logger.info("method " + jp.getTarget().getClass().getName()    
                    + "." + jp.getSignature().getName() + " throw exception");  
//          System.out.println(ex.getMessage());    
            logger.info(ex.getMessage());  
            /*LoggerUtil.info(jp.getClass(),jp.getTarget().getClass().getName() + "."   
                    + jp.getSignature().getName()+"[logo]:exception"+ex.toString());*/  
        }    
          
       /* private void sendEx(JoinPoint jp,String ex) {   
            LoggerUtil.info(jp.getClass(),jp.getTarget().getClass().getName() + "."   
                    + jp.getSignature().getName()+"[logo]:exception"+ex); 
        }  */  
}  

EageJacksonConverter.Java

[java]
view plain
copy





package com.jsonconvert;  
  
import java.io.IOException;  
import java.nio.charset.Charset;  
  
import org.codehaus.jackson.JsonEncoding;  
import org.codehaus.jackson.JsonGenerationException;  
import org.codehaus.jackson.JsonGenerator;  
import org.codehaus.jackson.JsonParseException;  
import org.codehaus.jackson.JsonProcessingException;  
import org.codehaus.jackson.map.JsonSerializer;  
import org.codehaus.jackson.map.ObjectMapper;  
import org.codehaus.jackson.map.SerializerProvider;  
import org.codehaus.jackson.map.type.TypeFactory;  
import org.codehaus.jackson.type.JavaType;  
import org.springframework.http.HttpInputMessage;  
import org.springframework.http.HttpOutputMessage;  
import org.springframework.http.MediaType;  
import org.springframework.http.converter.AbstractHttpMessageConverter;  
import org.springframework.http.converter.HttpMessageNotReadableException;  
import org.springframework.http.converter.HttpMessageNotWritableException;  
import org.springframework.util.Assert;  
  
public class EageJacksonConverter extends AbstractHttpMessageConverter<Object> {  
    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");  
  
    private ObjectMapper objectMapper = new ObjectMapper();  
  
    private boolean prefixJson = false;  
  
    public EageJacksonConverter() {  
        super(new MediaType("application", "json", DEFAULT_CHARSET));  
    }  
  
    public void setObjectMapper(ObjectMapper objectMapper) {  
        Assert.notNull(objectMapper, "'objectMapper' must not be null");  
        this.objectMapper = objectMapper;  
    }  
  
    public void setPrefixJson(boolean prefixJson) {  
        this.prefixJson = prefixJson;  
    }  
  
    public boolean canRead(Class<?> clazz, MediaType mediaType) {  
        JavaType javaType = getJavaType(clazz);  
        return (this.objectMapper.canDeserialize(javaType))  
                && (canRead(mediaType));  
    }  
  
    protected JavaType getJavaType(Class<?> clazz) {  
        return TypeFactory.type(clazz);  
    }  
  
    public boolean canWrite(Class<?> clazz, MediaType mediaType) {  
        return (this.objectMapper.canSerialize(clazz)) && (canWrite(mediaType));  
    }  
  
    protected boolean supports(Class<?> clazz) {  
        throw new UnsupportedOperationException();  
    }  
  
    protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage)  
            throws IOException, HttpMessageNotReadableException {  
        JavaType javaType = getJavaType(clazz);  
        try {  
            return this.objectMapper  
                    .readValue(inputMessage.getBody(), javaType);  
        } catch (JsonParseException ex) {  
            throw new HttpMessageNotReadableException("Could not read JSON: "  
                    + ex.getMessage(), ex);  
        }  
    }  
  
    protected void writeInternal(Object o, HttpOutputMessage outputMessage)  
            throws IOException, HttpMessageNotWritableException {  
  
        JsonEncoding encoding = getEncoding(outputMessage.getHeaders()  
                .getContentType());  
        SerializerProvider serializerProvider = this.objectMapper  
                .getSerializerProvider();  
        serializerProvider.setNullValueSerializer(new JsonSerializer<Object>() {  
  
            @Override  
            public void serialize(Object arg0, JsonGenerator arg1,  
                    SerializerProvider arg2) throws IOException,  
                    JsonProcessingException {  
                arg1.writeObject("");  
            }  
  
        });  
  
        JsonGenerator jsonGenerator = this.objectMapper.getJsonFactory()  
                .createJsonGenerator(outputMessage.getBody(), encoding);  
        try {  
            if (this.prefixJson) {  
                jsonGenerator.writeRaw("{} && ");  
            }  
            this.objectMapper.writeValue(jsonGenerator, o);  
        } catch (JsonGenerationException ex) {  
            throw new HttpMessageNotWritableException("Could not write JSON: "  
                    + ex.getMessage(), ex);  
        }  
    }  
  
    private JsonEncoding getEncoding(MediaType contentType) {  
        if ((contentType != null) && (contentType.getCharSet() != null)) {  
            Charset charset = contentType.getCharSet();  
            for (JsonEncoding encoding : JsonEncoding.values()) {  
                if (charset.name().equals(encoding.getJavaName())) {  
                    return encoding;  
                }  
            }  
        }  
        return JsonEncoding.UTF8;  
    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: