`
bo_hai
  • 浏览: 565798 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

SpringMVC interceptor 中获取 requestbody

阅读更多

   在拦截器中获取请求体(requestbody)的内容,代码如下:

 

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
 * 
 * @author 
 * 流的方式获取JSON数据
 */
public class RequestWrapper extends HttpServletRequestWrapper {

	//存放JSON数据主体
	private final String body;
	
	public RequestWrapper(HttpServletRequest request) throws IOException {
		super(request);
		StringBuilder stringBuilder = new StringBuilder();
		BufferedReader bufferedReader = null;
		try {
			InputStream inputStream = request.getInputStream();
			if (inputStream != null) {
				bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
				char[] charBuffer = new char[128];
				int bytesRead = -1;
				while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
					stringBuilder.append(charBuffer, 0, bytesRead);
				}
			} else {
				stringBuilder.append("");
			}
		} catch (IOException ex) {
			throw ex;
		} finally {
			if (bufferedReader != null) {
				try {
					bufferedReader.close();
				} catch (IOException ex) {
					throw ex;
				}
			}
		}
		 body = stringBuilder.toString();
	}
	@Override
	public ServletInputStream getInputStream() throws IOException {
		final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes("UTF-8"));
		ServletInputStream servletInputStream = new ServletInputStream() {
			@Override
			public int read() throws IOException {
				return byteArrayInputStream.read();
			}
		};
		return servletInputStream;
	}
	
	@Override
	public BufferedReader getReader() throws IOException {
		return new BufferedReader(new InputStreamReader(this.getInputStream()));
	}
	
	public String getBody() {
		return this.body;
	}
}

 参考:http://stackoverflow.com/questions/10457963/spring-rest-service-retrieving-json-from-request/10458119#10458119

分享到:
评论

相关推荐

    spring+springmvc+Interceptor+jwt+redis实现sso单点登录

    public ResponseEntity<?> login(@RequestBody Login login) { // 登录逻辑 if (validateLogin(login)) { User user = getUserFromDatabase(login.getUsername()); String token = JwtUtils.generateToken(user...

    springMVC快速入门 深入分析

    SpringMVC通过@RequestBody、@ResponseBody注解以及HttpMessageConverter等机制,提供了对AJAX请求的强大支持,允许开发者以非常简洁的方式处理JSON和XML数据。 SpringMVC的配置相对灵活,可以在一个或多个配置文件...

    springmvc处理器和配置器

    - `@RequestBody` 和 `@ResponseBody`:用于处理HTTP请求体和响应体。 5. **拦截器(Interceptor)**: - 拦截器可以在请求到达处理器之前或之后执行自定义逻辑,例如日志记录、权限检查、性能统计等。 - 实现`...

    22道面试常问的SpringMVC面试题!.zip

    SpringMVC是Java Web开发中广泛使用的框架,它在企业级应用中扮演着核心角色,因此对于求职者来说,掌握SpringMVC的知识至关重要。这里,我们深入探讨22道SpringMVC面试题,帮助你更好地理解和准备面试。 1. **什么...

    springmvc课堂笔记

    - **实现方式**:使用`@ResponseBody`注解将Java对象序列化为JSON字符串,或使用`@RequestBody`注解将JSON字符串反序列化为Java对象。 ##### 6.5 RESTful支持 - **实现方式**:通过`@RequestMapping`指定HTTP方法和...

    手写springMvc底层

    SpringMVC提供了多种适配器,如RequestMappingHandlerAdapter,用于支持@RequestBody、@ResponseBody等注解的处理器。处理器执行完业务逻辑后,可能会返回ModelAndView对象,包含了视图名和模型数据。 然后,视图...

    springMvc学习参考资料

    15. **Ajax支持**:Spring MVC提供了方便的Ajax支持,可以通过@ResponseBody和@RequestBody注解来处理JSON或XML格式的异步请求。 在"spring3hello"这个示例中,很可能是对Spring MVC的基本Hello World应用,展示了...

    springmvc 4.1

    Spring MVC 4.1增强了对RESTful风格的支持,包括使用`@PathVariable`获取URL路径中的变量,`@RequestParam`获取请求参数,`@RequestBody`和`@ResponseBody`用于JSON或其他格式的HTTP消息体交互。 9. **消息转换器...

    springmvc 简单入门源码

    11. **@RequestBody** 和 **@ResponseBody**:前者用于将HTTP请求体中的数据映射到方法参数,后者用于将方法返回的对象直接序列化为HTTP响应体。 12. **HandlerAdapter**:适配器模式的体现,Spring MVC提供了多种...

    springMVC配置、注解、列子

    6. `@RequestBody` 和 `@ResponseBody`:将请求体转换为对象,或者将响应对象直接写入响应体。 7. `@ModelAttribute`:用于绑定请求参数到模型对象,常与表单提交一起使用。 现在,让我们通过一个例子来理解这些...

    sturts2、springmvc知识点

    为了支持JSON操作,可以在SpringMVC中添加`MappingJacksonHttpMessageConverter`消息转换器,然后通过`@RequestBody`和`@ResponseBody`注解来处理JSON数据。 ##### 控制器 控制器在SpringMVC中通常由带有`@...

    springmvc项目源码

    Spring MVC 提供了强大的数据绑定和验证功能,`@RequestParam`、`@PathVariable`、`@RequestBody` 等注解用于参数绑定,而 `@Valid` 和 `javax.validation` 验证注解用于数据校验。 8. **RESTful API 设计**: ...

    springmvc学习笔记-springmvc注解开发.zip

    - `@RequestBody`:将请求体内容转换为Java对象,通常用于POST请求。 - `@ModelAttribute`:用于从模型中获取或向模型添加属性。 4. **视图解析**: - `@ResponseBody`:将方法返回值直接写入HTTP响应体,常用于...

    学生系统平台的SpringMVC代码

    8. **AJAX支持**:SpringMVC通过`@ResponseBody`和`@RequestBody`支持JSON或XML格式的数据交换,方便实现异步请求。 9. **RESTful风格**:SpringMVC可以轻松实现RESTful API,利用HTTP动词(GET、POST、PUT、DELETE...

    springMVC,蛮简单的,适合初学者,快下回家吧学学吧!

    这些方法通常会通过@RequestBody和@RequestParam等注解来接收请求参数,然后进行业务处理。 视图层在SpringMVC中可以是任何支持的视图技术,如JSP、Thymeleaf或FreeMarker。Controller处理完业务逻辑后,会返回一个...

    springmvc.docx

    - 请求体参数:使用 @RequestBody 从 HTTP 请求体中获取 JSON 或 XML 数据。 7. **JSON 处理** - 配置 Jackson 或 Gson 库,支持自动将 Java 对象转换为 JSON 字符串,反之亦然。 - 使用 @ResponseBody 注解标记...

    springMVC框架搭建及代码

    通过Spring MVC提供的注解,如@RequestParam、@PathVariable、@RequestBody、@ResponseBody等,可以方便地处理HTTP请求参数。 总结,Spring MVC作为一个轻量级的Web框架,其灵活的配置和强大的功能使得开发者能高效...

    传智播客2016springmvc资料

    - 利用 `@RequestBody` 和 `@ResponseBody` 处理 JSON 或 XML 数据交换。 这些只是 Spring MVC 基本概念的一部分,实际的压缩包资料可能涵盖了更深入的内容,如AOP(面向切面编程)、Spring Security、Spring Data...

    SpringMVC框架所需jar包

    通过注解@RequestBody和@ResponseBody可以方便地处理请求参数和返回响应。 4. **ModelAndView**:用于在Controller中存储模型数据和视图名,然后传递给视图解析器。 5. **ViewResolver**:视图解析器,根据...

    springmvc入门实例

    对于更复杂的请求,可以使用@RequestParam来获取查询参数,或者使用@RequestBody来接收JSON或XML格式的请求体。 处理完数据后,Spring MVC会通过视图解析器将结果模型和视图名结合,渲染出响应内容。常见的视图技术...

Global site tag (gtag.js) - Google Analytics