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
分享到:
相关推荐
在Controller中,我们可以使用HttpClient来与远程服务交互,获取或发送数据。以下是一个简单的步骤概述: 1. **配置HttpClient**:在Spring MVC项目中,我们需要先引入HttpClient的相关依赖,如`httpclient`和`...
在本项目"SpringMVC-httpclient"中,我们将探讨如何在SpringMVC应用中使用HttpClient库来发送POST请求,同时涵盖HTTP和HTTPS两种通信协议。 首先,了解POST请求的基本概念至关重要。在HTTP协议中,POST是用于向...
HttpClient库是由Apache软件基金会开发的,广泛应用于各种网络通信场景,包括数据的获取、上传、下载等。本篇文章将详细介绍如何使用HttpClient进行HTTP请求,并提供一个完整的Java代码实例。 首先,我们需要引入...
本项目结合了SpringMVC的多数据源配置和HttpClient的文件上传功能,实现了复杂的企业级应用需求。在实际开发中,根据业务场景的不同,可能还需要处理更多细节,如数据源的负载均衡、错误处理和日志记录等。理解和...
4. **处理响应**:执行请求后,你需要解析HttpResponse以获取响应状态码、头部信息和实体内容。 5. **错误处理**:处理可能出现的IOException和其他异常,确保程序的健壮性。 Spring MVC的使用包括以下几个步骤: 1...
- 对于微信API的调用,使用HttpClient或OkHttp库发送网络请求,处理JSON或XML数据。 - 数据库操作应遵循DAO设计模式,保持业务逻辑与数据访问分离。 - 考虑异常处理和日志记录,以增强应用的健壮性和可维护性。 总...
接口通常由@Controller注解的类中的方法定义,这些方法接收HTTP请求,通过@RequestParam、@PathVariable等注解获取请求参数,然后调用服务层(Service层)进行业务处理,最后返回响应结果。 在测试Spring MVC接口时...
这可能是一个简单的命令行工具,或者一个使用HTTP库(如Apache HttpClient或OkHttp)的Java应用程序,用于发送HTTP请求到接口并解析返回的JSON数据,以验证接口的功能是否正常。 综上所述,这个项目提供了一个基本...
同时,确保正确配置了日志框架,以便在调试过程中获取HTTPClient的详细操作信息。 总的来说,HTTPClient 4.5结合Spring MVC REST接口,提供了强大的网络通信能力,而`commons-beanutils`则简化了对象属性的操作。...
在Java爬虫领域,我们可以利用SpringMVC的特性构建一个后端服务,用于接收请求、处理数据并返回结果。本文将深入探讨如何将SpringMVC与Java爬虫技术相结合,创建一个功能完善的Web应用。 **一、SpringMVC基础知识**...
客户端部分(restful_webservice_client)可能是利用Java的HttpURLConnection或者使用第三方库如Apache HttpClient、OkHttp来发送HTTP请求,然后解析响应内容。 为了实现客户端,我们需要: 1. **构建请求**:根据...
接口调用通常涉及网络请求,可以使用HttpURLConnection、Apache HttpClient或者Spring的RestTemplate等工具。在Java中,这些工具可以发送GET或POST请求,接收JSON或其他格式的数据,并将其转换为Java对象。在这个...
该项目是一个使用Java编程语言开发的爬虫程序,它结合了Spring、SpringMVC(SSM)框架、Maven构建工具以及httpClient和jsoup库来抓取和解析网页内容,特别是针对小说网站的数据获取。以下是对这个项目各部分的详细...
2. 数据获取:使用HttpClient获取课程列表,解析HTML或JSON数据,提取所需信息。 3. 选课逻辑:根据用户需求,制定选课策略,如优先级、避免冲突等,HttpClient负责执行这些策略。 4. 异步处理:为了提高选课效率,...
9. **commons-httpclient**:这是一个 HTTP 客户端库,用于发送 HTTP 请求和处理响应。在 Spring MVC 的集成测试或者与外部 RESTful API 交互时,可能会用到这个库。 10. **commons-collections**:提供了丰富的...
在这个基于SSM+maven+httpClient+jsoup实现的小说网站项目中,我们主要涉及了四个核心的技术栈,分别是Spring、SpringMVC、MyBatis(SSM)以及HTTP客户端库httpClient和网页抓取库jsoup。下面将详细介绍这些技术及其...
接下来,我们可以使用HttpClient的方法来发送GET请求获取数据。假设我们有一个REST服务,其URL为`http://example.com/api/data`,可以这样实现: ```typescript this.http.get('http://example.com/api/data')....
在Java中,可以使用HttpURLConnection、Apache HttpClient或者OkHttp等库来发送HTTP请求。在SSM框架中,HTTP请求通常由SpringMVC的Controller接收到,然后调用相应的服务方法进行处理。 总结来说,这个项目涵盖了...