SpringMVC 的请求响应扩展 ( @ResponseBody 、ResponseEntity对象 、@RequestBody 、RequestEntity对象 )

1. 注解:@ResponseBody 概念

@ResponseBody  :该注解使用在Controller 方法上的  。将方法的返回值通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区),通常用来给客户端返回 JSON 数据或者是 XML 数据。

当方法上面没有写 ResponseBody 时,底层会将方法的返回值封装为 ModelAndView 对象;需要注意的是,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过 response 对象输出指定格式的数据。

如果返回值是 POJO   那么必须导入 以下的  jackson  类库包,否者无法将对象转换成json格式的 从而发生错误 。

  	
<!--   jackson 包  :用于将对象   转换成   json格式的数据  -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind  -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.9</version>
</dependency> 

 

使用@ResponseBody注解 响应ajax请求  实例请看:https://blog.csdn.net/weixin_42325327/article/details/104264512

 

 

2. ResponseEntity  响应实体对象

ResponseEntity可以定义返回的HttpStatus(状态码)和 HttpHeaders(响应头)  和 响应体body

Controller 中的 方法返回值 可以定义为ResponseEntity ,那么效果就是展示响应体,就和@ResponseBody 一样。(同样不会被SpringMVC解析成视图 ModelAndView),但它更加强大,内部可以自定义响应头,状态码。 

注:如果ResponseEntity中的响应体为 POJO  也要配置jackson  类库包 

ResponseEntity 对象有几个构造方法 ,指定 :HttpStatus 创建POJO  ,指定状态码 和响应体创建POJO ,以及指定 状态码 响应体 响应头 传进POJO ............可以按照自己的需求创建对象。

 

以下编写一个 Controller 演示  ResponseEntity  :

@RequestMapping("hanlder01")
@ResponseBody
public ResponseEntity<Employee > hanlder01()   {
   /*
    * 使用 SpringMVC 中的   ResponseEntity对象 作为返回值
    *	  该对象表示  响应的实体 : 响应体、响应头、 (响应行-状态码) 
    */

    //响应体
    Employee emp = new Employee(1,"小黑","男",20,new Dept()); 
    //响应头,  HttpHeaders实现map集合  ,存储多个 header
    HttpHeaders header = new HttpHeaders();
    header.add("Context-type", "text/html;charset=utf-8");
		
    //创建ResponseEntity 实体对象
    ResponseEntity<Employee > responseEntity = new  ResponseEntity<Employee >(body, header,HttpStatus.OK);
		
   return responseEntity;
}

ResponseEntity 泛型中指定响应体数据类型

 

浏览器访问

 

3. 注解  @RequestBody

该注解 加在Controller 的处理方法的形参上,作用其实是将json格式的数据转为java对象,让我们看以下案例吧

 

Controller:

jsp:

注意:如果表单中提交了字符数据,通过@RequestBody注解的方式取出来会乱码,这是因为form表单中有一个默认属性enctype="application/x-www-form-urlencoded",就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。

可以将这个属性改为:enctype="text/plain"  (表单数据会在未编码的情况下发送到服务器),这样提交字符时就不会乱码。

 

接下里浏览器访问 jsp 页面,点击提交,向服务器发送请求

控制台输出:

name=xiaohei&age=20

 

 

4. RequestEntiry 请求实体对象

RequestEntiry 对象表示一个 请求实体对象,内部封装了  请求行,请求头,请求体 。

该对象可以用作 Controller 控制器中 处理方法的入参,SpringMVC会将请求解析成对象

 

代码演示:

Controller:

jsp页面:用来发送请求

 

浏览器访问jsp页面,提交按钮,发送请求。看以下控制台的输出:

<POST http://localhost:8080/springMvcCrud/Hanlder06,name=xiaohei&age=20,{host=[localhost:8080], connection=[keep-alive], content-length=[19], cache-control=[max-age=0], origin=[http://localhost:8080], upgrade-insecure-requests=[1], user-agent=[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36], sec-fetch-dest=[document], accept=[text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9], sec-fetch-site=[same-origin], sec-fetch-mode=[navigate], sec-fetch-user=[?1], referer=[http://localhost:8080/springMvcCrud/body.jsp], accept-encoding=[gzip, deflate, br], accept-language=[zh-CN,zh;q=0.9], cookie=[JSESSIONID=FF33462F558A6EC86AB40D47057F7A47], Content-Type=[application/x-www-form-urlencoded;charset=UTF-8]}>

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值