天天看点

SpringMVC对HTTP报文体的处理

 客户端和服务端HTTP报文传递消息,而HTTP报文包含报文头和报文体。通常,解析请求参数以及返回页面都不需要我们关心HTTP报文体的读取和生成过程。但在某些特定场景下需要直接到请求报文中读取报文体,或者将返回的数据直接写入到报文体中。

  在SpringMVC中,可以利用RequestBody注解表示一个参数,说明解析它需要读取报文体,也可以直接将参数类型声明成HttpEntity<T>类型。与处理请求类似,如果想要将对象写入到响应报文的报文体中,则可以返回HttpEntity<T>类型的数据或者在方法上标注ResponseBody。

一个例子:

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/tests")
public class TestController {

     @RequestMapping("/handle")
     public HttpEntity<String> handle() {
       HttpHeaders responseHeaders = new HttpHeaders();
       responseHeaders.set("MyResponseHeader", "MyValue");
       return new HttpEntity<String>("Hello World", responseHeaders);
     }

}      

这个例子最后可以将你的报文头返回并自定义报文头,这样运用的场景就是你需要某些参数传入header中时,需要这样的写法。

其他有用的注解:

其他有用的注释 

  使用 @RequestParam 将 URL 参数插入方法中。 

  使用 @RequestHeader 将某一 HTTP 头插入方法中。 

  使用 @RequestBody 将 HTTP 请求正文插入方法中。 

  使用 @ResponseBody 将内容或对象作为 HTTP 响应正文返回。 

  使用 HttpEntity<T> 将它自动插入方法中,如果将它作为参数提供。 

  使用 ResponseEntity<T> 返回具有自定义状态或头的 HTTP 响应。      

这个是官方的文档:​​http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/HttpEntity.html​​