@Responsebody與@RequestBody 的使用疑惑

@Controller
@RequestMapping(value = "/web")//類級別,能夠不用指定路徑
public class LoginController {

	@Autowired
	private LoginService loginService;

	@RequestMapping(value = "/login", method = RequestMethod.POST)//方法級別,必定要指定路徑
	@ResponseBody
	public MobileReturn<Head> login(@RequestBody Student student) {
		List<Student> list = loginService.login(student);

		System.out.println(list);
		Head head =new Head();
		head.setData(list);
		head.setMsg("學生存在");
		return new MobileReturn<>(head);
		//不會被解析爲跳轉路徑,而是直接寫入HTTP response body中
	}

}

解釋:html

@Responsebody與@RequestBody
@Responsebody表示該方法的返回結果直接寫入HTTP response body中
通常在異步獲取數據時使用,在使用@RequestMapping後,返回值一般解析爲跳轉路徑,
加上@Responsebody後返回結果不會被解析爲跳轉路徑,而是直接寫入HTTP response body中。
好比異步獲取json數據,加上@Responsebody後,會直接返回json數據。
@RequestBody將HTTP請求正文插入方法中,使用適合的HttpMessageConverter將請求體寫入某個對象。

@ResponseBody

做用:  該註解用於將Controller的方法返回的對象,經過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區。java

使用時機: 返回的數據不是html標籤的頁面,而是其餘某種格式的數據時(如json、xml等)使用。web

@RequestBody

做用:
json

      i) 該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,而後把相應的數據綁定到要返回的對象上;app

      ii) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。
異步

使用時機:編碼

A) GET、POST方式提時, 根據request header Content-Type的值來判斷:url

  •     application/x-www-form-urlencoded, 可選(即非必須,由於這種狀況的數據@RequestParam, @ModelAttribute也能夠處理,固然@RequestBody也能處理);spa

  •     multipart/form-data, 不能處理(即便用@RequestBody不能處理這種格式的數據);code

  •     其餘格式, 必須(其餘格式包括application/json, application/xml等。這些格式的數據,必須使用@RequestBody來處理);

B) PUT方式提交時, 根據request header Content-Type的值來判斷:

  •     application/x-www-form-urlencoded, 必須;

  •     multipart/form-data, 不能處理;

  •     其餘格式, 必須;

說明:request的body部分的數據編碼格式由header部分的Content-Type指定。

@RequestMapping

是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。

相關文章
相關標籤/搜索