天天看點

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​​