客户端和服务端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