@RequestBody
作用:
i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
- application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
- multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
- 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
B) PUT方式提交时, 根据request header Content-Type的值来判断:
- application/x-www-form-urlencoded, 必须;
- multipart/form-data, 不能处理;
- 其他格式, 必须;
说明:request的body部分的数据编码格式由header部分的Content-Type指定;
@ResponseBody
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
例如:
function getStockList(type,pno){ $.ajax({ type: "post", url: "${contextPath}/stock/page", dataType: "json",//ResponseBody 返回的类型 contentType:"application/json",//RequestBody请求的类型 data: JSON.stringify(getParam(pno)), success: function(rs){ if(rs.status>0){ vm.datalist=rs.list; if(type==1){ generPageHtml(rs.currentPage,rs.totalPage,rs.total); } }else{ } }, error: function(XMLHttpRequest, textStatus, errorThrown){ } }); }
@ResponseBody
@RequestMapping(value="/page" , method = RequestMethod.POST)
public PageView pageStockPage(@RequestBody StockExt stockExt) {//声明为RequestBody
int total = stockService.queryPageCount(stockExt);
List<Stock> list=new ArrayList<Stock>();
List<StockVo> listVo=new ArrayList<StockVo>();
if (total > 0) {
list=stockService.queryPage(stockExt);
listVo = BeanConvertor.convert2StockVo(list);//转成vo集合传到页面上
}
PageView pageView = buildSuccessResult();
pageView.setTotal(total);
pageView.setList(listVo);
return pageView;
}