注解@ResponseBody,使用在控制层(controller)的方法上。
一、@ResponseBody作用:
将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。
当方法上面没有写@ResponseBody,底层会将方法的返回值封装为ModelAndView对象。
如果返回值是字符串,那么直接将字符串写到客户端;如果是一个Java对象,会将对象转化为json串,然后写到客户端。
@ResponseBody是作用在方法上的,@ResponseBody表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用(AJAX)。
注意编码:
注解中我们可以手动修改编码格式,例如:
@ResponseMapping(value="/register.do",produces="text/html;charset=utf-8"),前面是请求的路径,后面是编码格式。
二、适用场景
有时候我们需要用Controller实现网络服务接口,比如:商品查询、查询天气、新闻数据等。就不需要进行页面跳转而是直接返回数据。
这时候我们可以在方法上,添加注解:@ResponseBody
在浏览器中直接显示hello文字,也就是说添加了@ResponseBody注解的方法,返回值会通过HTTP响应主体直接发送给浏览器。
@Controller
@RequestMapping("/test")
public class DemoController{
@RequestMapping("/hello.do")
@ResponseBody
public String hello(){
return "hello";
}
}
类型转换器
默认情况下,使用@ResponseBody返回的数据只能是String类型,其它类型返回时会出现异常:
这里提示没有对应的转换器,这里可以添加转换器将数据转换为特定的格式,如:xml或json等,JSON是数据通信的主要格式,我们将添加一个JSON格式的转换器。配置方法非常简单,我们只需要添加jackson-databind依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4</version>
</dependency>
Jackson库可以实现Java对象和JSON的相互转换,引入Jackson-databind依赖后,SpringMVC会自动添加Jackson的转换器。
三、遇到的问题
通过地址栏注册用户的时候,明明地址输的没问题,可是却找不到,查看一下数据库,也可以插进记录。
下面是从数据库里查到的记录:
最后发现忘加@ResponsBody,加上之后,就可以正常运行了