Jmeter Sampler (取样器插件开发) 制定自己的 Sampler

Jmeter可以帮助我们做性能测试、接口测试,然而Jmeter支持常用的HTTP等协议,如果某个公司采用自由协议那么Jmeter要采用实现【JavaSamplerClient】接口,这种方式当然是比较好的,但是有些东西和Jmeter自身的参数化等等功能,不太好结合,有的还有BUG,当然这个最灵活的,当然也可以采取做一个协议插件,嵌入到Jmeter中,那么怎么做呢?

1. 首先第一个做一个测试的GUI,要实现AbstractSamplerGui 类做才能被Jmeter加载


<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">DemoSampleGui</span> <span class="kd">extends</span> <span class="n">AbstractSamplerGui</span> <span class="kd">implements</span> <span class="n">ItemListener</span> <span class="o">{</span>
    <span class="kd">private</span> <span class="n">DemoParamConfigGui</span> <span class="n">demoParamConfigGui</span><span class="o">;</span>

    <span class="kd">public</span> <span class="n">DemoSampleGui</span><span class="o">()</span> <span class="o">{</span>    <span class="c1">//构造方法初始化</span>
          <span class="n">init</span><span class="o">();</span>
      <span class="o">}</span>
  <span class="cm">/**
     * @Descrition初始化
    * */</span>
    <span class="kd">private</span> <span class="kt">void</span> <span class="n">init</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">setLayout</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">5</span><span class="o">));</span>
        <span class="n">setBorder</span><span class="o">(</span><span class="n">makeBorder</span><span class="o">());</span>
        <span class="n">add</span><span class="o">(</span><span class="n">makeTitlePanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">NORTH</span><span class="o">);</span>            <span class="c1">//设置布局</span>

        <span class="n">demoParamConfigGui</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DemoParamConfigGui</span><span class="o">();</span>   <span class="c1">//这里是另外一个面板类,抽出去了,一会单独说</span>
        <span class="n">add</span><span class="o">(</span><span class="n">demoParamConfigGui</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="cm">/**
     * @Descrition清除页面数据信息
    * */</span>
     <span class="nd">@Override</span>                           
      <span class="kd">public</span> <span class="kt">void</span> <span class="n">clearGui</span><span class="o">()</span> <span class="o">{</span>
        <span class="kd">super</span><span class="o">.</span><span class="na">clearGui</span><span class="o">();</span>
        <span class="n">demoParamConfigGui</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span>
    <span class="o">}</span>
 <span class="cm">/**
     * @Descrition:配置组装元素信息
    * */</span>
     <span class="nd">@Override</span>                           
    <span class="kd">public</span> <span class="kt">void</span> <span class="n">configure</span><span class="o">(</span><span class="n">TestElement</span> <span class="n">element</span><span class="o">)</span> <span class="o">{</span>
        <span class="kd">super</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">element</span><span class="o">);</span>
        <span class="kd">final</span> <span class="n">MySamplerSamplerBase</span> <span class="n">samplerBase</span> <span class="o">=</span> <span class="o">(</span><span class="n">MySamplerSamplerBase</span><span class="o">)</span> <span class="n">element</span><span class="o">;</span>
        <span class="n">safParamConfigGui</span><span class="o">.</span><span class="na">configure</span><span class="o">(</span><span class="n">element</span><span class="o">);</span>
    <span class="o">}</span>

   <span class="cm">/**
     * @Descrition:创建新的元素
    * */</span>
    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">TestElement</span> <span class="n">createTestElement</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">MySamplerSamplerBase</span> <span class="n">sampler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerSamplerBase</span><span class="o">();</span>
        <span class="n">modifyTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span>
        <span class="k">return</span> <span class="n">sampler</span><span class="o">;</span>
    <span class="o">}</span>
    <span class="cm">/**
     * @Descrition:清除旧的组件,从新创建
    * */</span>
    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="n">modifyTestElement</span><span class="o">(</span><span class="n">TestElement</span> <span class="n">sampler</span><span class="o">)</span> <span class="o">{</span>
        <span class="n">sampler</span><span class="o">.</span><span class="na">clear</span><span class="o">();</span>
        <span class="n">safParamConfigGui</span><span class="o">.</span><span class="na">modifyTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span>
        <span class="k">this</span><span class="o">.</span><span class="na">configureTestElement</span><span class="o">(</span><span class="n">sampler</span><span class="o">);</span>
    <span class="o">}</span>
   <span class="cm">/**
     * @Descrition:label信息,也就是创建HTTP请求、JAVA请求
    * */</span>
    <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">getLabelResource</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="s">"mySampler_title"</span><span class="o">;</span> 
    <span class="o">}</span>
<span class="o">}

</span></code><p>Label那个由于Jmeter实现国际化,所以在配置文件里,通过mySampler_title去资源文件里面找的,如果我们想添加自己的需要修改CORE里面的配置文件,增加自己对应的UICODE编码</p><div class="fluidbox-wrap" style="z-index:990"><a target=_blank target="_blank" href="https://testerhome.com/photo/2016/95e4c91917f8601e96ecf49f8feddad7.png" class="zoom-image fluidbox"><img src="https://testerhome.com/photo/2016/95e4c91917f8601e96ecf49f8feddad7.png" alt="" style="" /></a></div>
<strong>2.DemoParamConfigGui 类,这个类主要是初始化面板信息,和修改信息用的,我简单列几行代码,下面给最终的截图,这里可以根据自己的要求更改</strong>
<pre name="code" class="highlight java"><code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerParamConfigGui</span> <span class="kd">extends</span> <span class="n">JPanel</span><span class="o">{</span>
    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceName</span><span class="o">;</span>
    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceAddress</span><span class="o">;</span>         
    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceGroup</span><span class="o">;</span>
    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceVersion</span><span class="o">;</span>
    <span class="kd">public</span> <span class="n">JTextField</span> <span class="n">interfaceMethod</span><span class="o">;</span>      <span class="c1">//定义几个页面输入框,这个根据自身需要开发哈,我这个是简单的例子</span>
 <span class="cm">/**
     * @Descrition:初始化面板
    * */</span>
 <span class="kd">private</span> <span class="kt">void</span> <span class="n">init</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">setLayout</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">5</span><span class="o">));</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">displayName</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">setBorder</span><span class="o">(</span><span class="n">makeBorder</span><span class="o">());</span>
            <span class="n">add</span><span class="o">(</span><span class="n">makeTitlePanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">NORTH</span><span class="o">);</span>
        <span class="o">}</span>
        <span class="c1">// MAIN PANEL</span>
        <span class="n">VerticalPanel</span> <span class="n">mainPanel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">VerticalPanel</span><span class="o">();</span>
        <span class="n">JPanel</span> <span class="n">serverPanel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HorizontalPanel</span><span class="o">();</span>
        <span class="n">serverPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceAddressPanel</span><span class="o">(),</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>
        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">serverPanel</span><span class="o">);</span>
        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceNamePanel</span><span class="o">());</span>
        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">getInterfaceGroupPanel</span><span class="o">());</span>
        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceVersionPanel</span><span class="o">());</span>
        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createInterfaceMethodPanel</span><span class="o">());</span>
        <span class="n">mainPanel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">createJarFilePathPanel</span><span class="o">());</span>
        <span class="n">add</span><span class="o">(</span><span class="n">mainPanel</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>
    <span class="o">}</span>

 <span class="cm">/**
     * @Descrition:创建文本框信息
    * */</span>
<span class="kd">private</span> <span class="n">JPanel</span> <span class="nf">createInterfaceMethodPanel</span><span class="p">(</span><span class="o">)</span> <span class="o">{</span>                              <span class="c1">//初始化上面文本对象,这里我列举一个例子,剩下都一下就是信息和布局的区别</span>
        <span class="n">interfaceMethod</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JTextField</span><span class="o">(</span><span class="mi">15</span><span class="o">);</span>
        <span class="n">JLabel</span> <span class="n">label</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JLabel</span><span class="o">(</span><span class="s">"调用方法:"</span><span class="o">);</span> <span class="c1">// $NON-NLS-1$</span>
        <span class="n">label</span><span class="o">.</span><span class="na">setLabelFor</span><span class="o">(</span><span class="n">interfaceMethod</span><span class="o">);</span>
        <span class="n">JPanel</span> <span class="n">panel</span> <span class="o">=</span> <span class="k">new</span> <span class="n">JPanel</span><span class="o">(</span><span class="k">new</span> <span class="n">BorderLayout</span><span class="o">(</span><span class="mi">5</span><span class="o">,</span> <span class="mi">0</span><span class="o">));</span>
        <span class="n">panel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">label</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">WEST</span><span class="o">);</span>
        <span class="n">panel</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">interfaceMethod</span><span class="o">,</span> <span class="n">BorderLayout</span><span class="o">.</span><span class="na">CENTER</span><span class="o">);</span>
        <span class="k">return</span> <span class="n">panel</span><span class="o">;</span>
    <span class="o">}</span></code>


3.Sampler相关的类

<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerSamplerBase</span> <span class="kd">extends</span> <span class="n">AbstractSampler</span>
        <span class="kd">implements</span> <span class="n">TestStateListener</span><span class="o">,</span> <span class="n">TestIterationListener</span><span class="o">,</span> <span class="n">ThreadListener</span><span class="o">,</span> <span class="n">Interruptible</span> <span class="o">{</span>
<span class="c1">// Code ///</span>

    <span class="kd">public</span> <span class="n">MySamplerSamplerBase</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">setArguments</span><span class="o">(</span><span class="k">new</span> <span class="n">Arguments</span><span class="o">());</span>
    <span class="o">}</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="n">setInterfaceName</span><span class="o">(</span><span class="n">String</span> <span class="n">newInterfaceName</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="n">InterfaceName</span><span class="o">,</span> <span class="n">newInterfaceName</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceAddress</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceAddress</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceName</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceName</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="n">setInterfaceGroup</span><span class="o">(</span><span class="n">String</span> <span class="n">newInterfaceGroup</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">this</span><span class="o">.</span><span class="na">setProperty</span><span class="o">(</span><span class="n">InterfaceGroup</span><span class="o">,</span> <span class="n">newInterfaceGroup</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span> 
    <span class="o">}</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceGroup</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceGroup</span><span class="o">,</span> <span class="s">""</span><span class="o">);</span> 
    <span class="o">}</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceVersion</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceVersion</span><span class="o">);</span>
    <span class="o">}</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="n">getInterfaceMethod</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">getPropertyAsString</span><span class="o">(</span><span class="n">InterfaceMethod</span><span class="o">);</span>
    <span class="o">}</span>                                                                                              <span class="c1">//这些都是从界面获取数据</span>

 <span class="cm">/**
     * @Descrition:设置参数
    * */</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="n">setArguments</span><span class="o">(</span><span class="n">Arguments</span> <span class="n">value</span><span class="o">)</span> <span class="o">{</span>                        <span class="c1">//设置和获取参数</span>
        <span class="n">setProperty</span><span class="o">(</span><span class="k">new</span> <span class="n">TestElementProperty</span><span class="o">(</span><span class="n">ARGUMENTS</span><span class="o">,</span> <span class="n">value</span><span class="o">));</span> 
    <span class="o">}</span>

 <span class="cm">/**
     * @Descrition:获取参数
    * */</span>
    <span class="kd">public</span> <span class="n">Arguments</span> <span class="n">getArguments</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="o">(</span><span class="n">Arguments</span><span class="o">)</span> <span class="n">getProperty</span><span class="o">(</span><span class="n">ARGUMENTS</span><span class="o">).</span><span class="na">getObjectValue</span><span class="o">();</span>
    <span class="o">}</span>

<span class="cm">/**
     * @Descrition:执行sampler这个非常重要了,是执行sampler的地方
    * */</span>
     <span class="nd">@Override</span>
    <span class="kd">public</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">(</span><span class="n">Entry</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">sample</span><span class="o">();</span>
    <span class="o">}</span>

  <span class="kd">private</span> <span class="kd">transient</span> <span class="n">MySamplerAbstractImpl</span> <span class="n">impl</span><span class="o">;</span>   <span class="c1">//sampler执行类的抽象类,</span>
  <span class="cm">/**
     * @Descrition:执行sampler
    * */</span>
   <span class="kd">public</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
        <span class="k">try</span> <span class="o">{</span>
            <span class="k">if</span> <span class="o">(</span><span class="n">impl</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>                                                   <span class="c1">//这里面可以做工厂模式,处理不同的协议sampler</span>
                <span class="n">impl</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerTestSampler</span><span class="o">(</span><span class="k">this</span><span class="o">);</span>
                <span class="n">List</span>  <span class="n">argumentList</span><span class="o">=</span><span class="n">getArgumentList</span><span class="o">();</span>        <span class="c1">//获取参数数据,默认的HTTP请求就是在这里组装带参数的URL,传入不同的client的</span>
                <span class="n">res</span> <span class="o">=</span> <span class="n">impl</span><span class="o">.</span><span class="na">sample</span><span class="o">(</span><span class="n">argumentList</span><span class="o">);</span>
                <span class="n">res</span><span class="o">.</span><span class="na">setSampleLabel</span><span class="o">(</span><span class="n">getName</span><span class="o">());</span>
            <span class="o">}</span>
            <span class="k">return</span> <span class="n">res</span><span class="o">;</span>
        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
            <span class="k">return</span> <span class="n">errorResult</span><span class="o">(</span><span class="n">e</span><span class="o">,</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">());</span>
        <span class="o">}</span>
    <span class="o">}</span>
  <span class="cm">/**
   * @Descrition: 这里面组装表格传过来的数据,传LIST过去 ,这里可以任意自己处理数据格式    
      * */</span>
    <span class="kd">public</span> <span class="n">List</span> <span class="n">getArgumentList</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">List</span><span class="o"><</span><span class="n">MySamplerArgument</span><span class="o">></span> <span class="n">list</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ArrayList</span><span class="o">();</span>
        <span class="n">PropertyIterator</span> <span class="n">iter</span> <span class="o">=</span> <span class="n">getArguments</span><span class="o">().</span><span class="na">iterator</span><span class="o">();</span>
        <span class="k">while</span> <span class="o">(</span><span class="n">iter</span><span class="o">.</span><span class="na">hasNext</span><span class="o">())</span> <span class="o">{</span>
            <span class="n">MySamplerArgument</span> <span class="n">item</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
            <span class="n">Object</span> <span class="n">objectValue</span> <span class="o">=</span> <span class="n">iter</span><span class="o">.</span><span class="na">next</span><span class="o">().</span><span class="na">getObjectValue</span><span class="o">();</span>
            <span class="k">try</span> <span class="o">{</span>
                <span class="n">item</span> <span class="o">=</span> <span class="o">(</span><span class="n">MySamplerArgument</span><span class="o">)</span> <span class="n">objectValue</span><span class="o">;</span>
                <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">item</span><span class="o">);</span>
            <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">ClassCastException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
                <span class="n">log</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="s">"Unexpected argument type: "</span> <span class="o">+</span> <span class="n">objectValue</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getName</span><span class="o">());</span>
                <span class="n">item</span> <span class="o">=</span> <span class="k">new</span> <span class="n">MySamplerArgument</span><span class="o">((</span><span class="n">Argument</span><span class="o">)</span> <span class="n">objectValue</span><span class="o">);</span>
            <span class="o">}</span>
        <span class="o">}</span>
        <span class="k">return</span> <span class="n">list</span><span class="o">;</span>
    <span class="o">}</span>
<span class="o">}</span></code>

*4.具体sampler执行类,具体的协议请求发起客户端要你自己定义了,集成到Jar包里就行,所有的类编写完成打JAR包扔到Jmeter/lib/ext下
*


<code><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MySamplerTestSampler</span> <span class="kd">extends</span> <span class="n">MySamplerAbstractImpl</span> <span class="o">{</span>

<span class="nd">@Override</span>
    <span class="kd">protected</span> <span class="n">SampleResult</span> <span class="n">sample</span><span class="o">(</span><span class="n">List</span> <span class="n">list</span><span class="o">)</span> <span class="o">{</span>  <span class="c1">//因为我定时的是list类型 所以这里面是list</span>
        <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">();</span>
      <span class="n">SampleResult</span> <span class="n">res</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SampleResult</span><span class="o">();</span>
        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"list:"</span><span class="o">+</span><span class="n">list</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>
        <span class="k">try</span> <span class="o">{</span>
            <span class="n">String</span> <span class="n">interfaceAddress</span> <span class="o">=</span> <span class="n">getInterfaceAddress</span><span class="o">();</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"interfaceAddress:"</span><span class="o">+</span><span class="n">interfaceAddress</span><span class="o">);</span>
            <span class="n">String</span> <span class="n">interfaceName</span> <span class="o">=</span> <span class="n">getInterfaceName</span><span class="o">();</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setSamplerData</span><span class="o">(</span><span class="s">"interfaceAddress:"</span><span class="o">+</span><span class="n">interfaceAddress</span><span class="o">+</span><span class="s">"interfaceName:"</span><span class="o">+</span><span class="n">interfaceName</span><span class="o">);</span>
            <span class="n">res</span><span class="o">.</span><span class="na">sampleStart</span><span class="o">();</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setResponseData</span><span class="o">(</span><span class="s">"list参数:"</span><span class="o">+</span><span class="n">list</span><span class="o">.</span><span class="na">toString</span><span class="o">(),</span><span class="s">"UTF-8"</span><span class="o">);</span>
        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">RuntimeException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setResponseCode</span><span class="o">(</span><span class="s">"500"</span><span class="o">);</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setSuccessful</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setResponseMessage</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>
            <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
            <span class="k">return</span> <span class="n">res</span><span class="o">;</span>
        <span class="o">}</span>  <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setResponseCode</span><span class="o">(</span><span class="s">"500"</span><span class="o">);</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setSuccessful</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span>
            <span class="n">res</span><span class="o">.</span><span class="na">setResponseMessage</span><span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">toString</span><span class="o">());</span>
            <span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
            <span class="k">return</span> <span class="n">res</span><span class="o">;</span>
        <span class="o">}</span> <span class="k">finally</span> <span class="o">{</span>
            <span class="n">res</span><span class="o">.</span><span class="na">sampleEnd</span><span class="o">();</span>
        <span class="o">}</span>
        <span class="k">return</span> <span class="n">res</span><span class="o">;</span>
  <span class="o">}</span>
<span class="o">}</span></code>

5.演示







                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值