`

SpringMVC获取HttpClient 请求的数据

阅读更多
package com.nnk.upstream.controller;


import org.springframework.util.StreamUtils;

import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created with IntelliJ IDEA.
 * User: y
 * Date: 2016/6/12
 * Time: 9:30
 * email: xxydliuy@163.com
 * To change this template use File | Settings | File Templates.
 */
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
    private byte[] body;
    public MyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
        super(request);
        body = StreamUtils.copyToByteArray(request.getInputStream());
        String contentType = request.getContentType();

        System.out.println("contentType:" + contentType);
        System.out.println("body length:" + body.length);
    }

    @Override
    public ServletInputStream getInputStream() throws IOException {
       final ByteArrayInputStream bais = new ByteArrayInputStream(body);
        return new ServletInputStream() {
            @Override
            public int read() throws IOException {
                return bais.read();
            }

            @Override
            public boolean isFinished() {
                return false;
            }

            @Override
            public boolean isReady() {
                return false;
            }

            @Override
            public void setReadListener(ReadListener readListener) {

            }
        };

    }

    @Override
    public BufferedReader getReader() throws IOException {
        return new BufferedReader(new InputStreamReader(getInputStream()));
    }
}

引用
过滤器配置

package com.nnk.upstream.controller;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * Created with IntelliJ IDEA.
 * User: y
 * Date: 2016/6/12
 * Time: 9:35
 * email: xxydliuy@163.com
 * To change this template use File | Settings | File Templates.
 */
@WebFilter(filterName = "HttpReplaceFilter",urlPatterns="/*")
public class HttpReplaceFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        ServletRequest requestWrapper = null;

        if(request instanceof HttpServletRequest) {
            if(((HttpServletRequest) request).getMethod().equalsIgnoreCase("post")) {
                requestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) request);
            }
        }
        if(null == requestWrapper) {
            chain.doFilter(request, response);
        } else {
            chain.doFilter(requestWrapper, response);
        }
    }

    @Override
    public void destroy() {

    }
}

引用
springboot 对过滤器的支持需要使用@ServletComponentScan相关注解

@Configuration
@ComponentScan("com.nnk.upstream")
@EnableAutoConfiguration
@ImportResource("classpath:/context/bean.xml")
@ServletComponentScan
public class SampleIntegrationApplication extends SpringBootServletInitializer {
    public static final Logger LOGGER = Logger.getLogger(SampleIntegrationApplication.class);
    public static String IntanceKey;
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SampleIntegrationApplication.class);
    }
  public static void main(String[] args) throws Exception {
  SpringApplication.run(SampleIntegrationApplication.class, args);
}
}

引用
使用httpClient请求Url会发现无法获取到流数据,如果是contentType:application/x-www-form-urlencoded; charset=UTF-8但是如果是contentType:text/plain; charset=GBK则可以获取流数据。流数据只能被读取一次,而且跟请求类型有关系

package com.nnk.redis;

import com.nnk.upstream.core.ConfigContextManager;
import com.nnk.upstream.entity.parterner.CallbackRequest;
import com.nnk.upstream.util.ReflectUtils;
import com.nnk.upstream.util.SignSecurityUtlis;
import com.nnk.upstream.vo.InterfaceConfig;
import com.nnk.utils.http.exception.NetWorkException;
import com.nnk.utils.http.interfaces.HttpData;
import com.nnk.utils.http.utils.HttpClientUtils;
import org.apache.http.HttpEntity;
import org.apache.http.entity.StringEntity;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import java.nio.charset.Charset;

/**
 * Created with IntelliJ IDEA.
 * User: y
 * Date: 2016/4/25
 * Time: 9:49
 * email: xxydliuy@163.com
 * To change this template use File | Settings | File Templates.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:context/bean.xml" })
public class CallbackTest {
    private Logger logger = Logger.getLogger(CallbackTest.class);
    @Autowired
    private HttpClientUtils httpClientUtils;
    @Autowired
    private ConfigContextManager configContextManager;
    @Test
    public void testCallbackSuccess() throws NetWorkException {

        CallbackRequest request = new CallbackRequest();
        request.setOrderStatus("SUCCESS");
        request.setRespCode("0000");
        request.setRealValue("100");
        request.setOemorderId("oemH89898709909");
        request.setSendorderId("29038297439284320");
        request.setMerchantNo("2000000011");
        InterfaceConfig config = configContextManager.searchConfigContext("20000009");
        request.setRespMsg("成功");
        String signStr = ReflectUtils.getkeyValueString(request,"=","&","sign");
        String sign = SignSecurityUtlis.sign(signStr,"123456");
        request.setSign(sign);
        String Resp = httpClientUtils.doPost("http://localhost:8099/Upstream/coustomizeCallback?merid=200000009",request);

    }
    @Test
    public void testCallbackSuccess1() throws NetWorkException {


        String Resp = httpClientUtils.doPost("http://localhost:8099/Upstream/coustomizeCallback?merid=200000009",new HttpData() {
            @Override
            public HttpEntity getPostdata() {
                return new StringEntity("a=a&b=b", Charset.defaultCharset());
            }

            @Override
            public String getGetdata() {
                return null;
            }
        });

    }
}


引用
关于SpringMVc获取参数:请参看:http://json20080301.iteye.com/blog/1874074?utm_source=tuicool;
http://hw1287789687.iteye.com/blog/2199295
分享到:
评论

相关推荐

    springmvc实现httpclient调用服务

    在Controller中,我们可以使用HttpClient来与远程服务交互,获取或发送数据。以下是一个简单的步骤概述: 1. **配置HttpClient**:在Spring MVC项目中,我们需要先引入HttpClient的相关依赖,如`httpclient`和`...

    SpringMVC-httpclient

    在本项目"SpringMVC-httpclient"中,我们将探讨如何在SpringMVC应用中使用HttpClient库来发送POST请求,同时涵盖HTTP和HTTPS两种通信协议。 首先,了解POST请求的基本概念至关重要。在HTTP协议中,POST是用于向...

    JAVA发送HttpClient请求及接收请求完整代码实例

    HttpClient库是由Apache软件基金会开发的,广泛应用于各种网络通信场景,包括数据的获取、上传、下载等。本篇文章将详细介绍如何使用HttpClient进行HTTP请求,并提供一个完整的Java代码实例。 首先,我们需要引入...

    springMVC-mybatis多数据源配置及访问接口上传文件

    本项目结合了SpringMVC的多数据源配置和HttpClient的文件上传功能,实现了复杂的企业级应用需求。在实际开发中,根据业务场景的不同,可能还需要处理更多细节,如数据源的负载均衡、错误处理和日志记录等。理解和...

    HttpClient&SpringMvc;.zip

    4. **处理响应**:执行请求后,你需要解析HttpResponse以获取响应状态码、头部信息和实体内容。 5. **错误处理**:处理可能出现的IOException和其他异常,确保程序的健壮性。 Spring MVC的使用包括以下几个步骤: 1...

    用SpringMVC开发微信的示例代码

    - 对于微信API的调用,使用HttpClient或OkHttp库发送网络请求,处理JSON或XML数据。 - 数据库操作应遵循DAO设计模式,保持业务逻辑与数据访问分离。 - 考虑异常处理和日志记录,以增强应用的健壮性和可维护性。 总...

    springmvc 接口测试必备

    接口通常由@Controller注解的类中的方法定义,这些方法接收HTTP请求,通过@RequestParam、@PathVariable等注解获取请求参数,然后调用服务层(Service层)进行业务处理,最后返回响应结果。 在测试Spring MVC接口时...

    http接口返回json,springmvc+mybatis+oracle

    这可能是一个简单的命令行工具,或者一个使用HTTP库(如Apache HttpClient或OkHttp)的Java应用程序,用于发送HTTP请求到接口并解析返回的JSON数据,以验证接口的功能是否正常。 综上所述,这个项目提供了一个基本...

    httpclient 4.5 相关jar包 (Spring mvc REST风格对外接口,HttpClient调用)

    同时,确保正确配置了日志框架,以便在调试过程中获取HTTPClient的详细操作信息。 总的来说,HTTPClient 4.5结合Spring MVC REST接口,提供了强大的网络通信能力,而`commons-beanutils`则简化了对象属性的操作。...

    给予SpringMVC的java爬虫Demo.zip

    在Java爬虫领域,我们可以利用SpringMVC的特性构建一个后端服务,用于接收请求、处理数据并返回结果。本文将深入探讨如何将SpringMVC与Java爬虫技术相结合,创建一个功能完善的Web应用。 **一、SpringMVC基础知识**...

    restful webservice in springMVC Demo

    客户端部分(restful_webservice_client)可能是利用Java的HttpURLConnection或者使用第三方库如Apache HttpClient、OkHttp来发送HTTP请求,然后解析响应内容。 为了实现客户端,我们需要: 1. **构建请求**:根据...

    maven入门整合SpringMVC登录+调用天气接口实例

    接口调用通常涉及网络请求,可以使用HttpURLConnection、Apache HttpClient或者Spring的RestTemplate等工具。在Java中,这些工具可以发送GET或POST请求,接收JSON或其他格式的数据,并将其转换为Java对象。在这个...

    基于SSM+maven+httpClient+jsoup实现的java爬虫项目,一个完整的小说网站.zip

    该项目是一个使用Java编程语言开发的爬虫程序,它结合了Spring、SpringMVC(SSM)框架、Maven构建工具以及httpClient和jsoup库来抓取和解析网页内容,特别是针对小说网站的数据获取。以下是对这个项目各部分的详细...

    基于SSM和HttpClient的在线选课辅助系统的设计与实现

    2. 数据获取:使用HttpClient获取课程列表,解析HTML或JSON数据,提取所需信息。 3. 选课逻辑:根据用户需求,制定选课策略,如优先级、避免冲突等,HttpClient负责执行这些策略。 4. 异步处理:为了提高选课效率,...

    SpringMVC依赖包

    9. **commons-httpclient**:这是一个 HTTP 客户端库,用于发送 HTTP 请求和处理响应。在 Spring MVC 的集成测试或者与外部 RESTful API 交互时,可能会用到这个库。 10. **commons-collections**:提供了丰富的...

    基于SSM+maven+httpClient+jsoup实现小说网站项目.zip

    在这个基于SSM+maven+httpClient+jsoup实现的小说网站项目中,我们主要涉及了四个核心的技术栈,分别是Spring、SpringMVC、MyBatis(SSM)以及HTTP客户端库httpClient和网页抓取库jsoup。下面将详细介绍这些技术及其...

    angular2使用http服务从rest服务器上拉取数据

    接下来,我们可以使用HttpClient的方法来发送GET请求获取数据。假设我们有一个REST服务,其URL为`http://example.com/api/data`,可以这样实现: ```typescript this.http.get('http://example.com/api/data')....

    SSM框架搭建+mybatis自动生成+json传输对象+http请求

    在Java中,可以使用HttpURLConnection、Apache HttpClient或者OkHttp等库来发送HTTP请求。在SSM框架中,HTTP请求通常由SpringMVC的Controller接收到,然后调用相应的服务方法进行处理。 总结来说,这个项目涵盖了...

Global site tag (gtag.js) - Google Analytics