@ResponseBody注解作用与原理

注解@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注解作用与原理_第1张图片

类型转换器

默认情况下,使用@ResponseBody返回的数据只能是String类型,其它类型返回时会出现异常:

这里提示没有对应的转换器,这里可以添加转换器将数据转换为特定的格式,如:xml或json等,JSON是数据通信的主要格式,我们将添加一个JSON格式的转换器。配置方法非常简单,我们只需要添加jackson-databind依赖:


            com.fasterxml.jackson.core
            jackson-databind
            2.13.4
        

Jackson库可以实现Java对象和JSON的相互转换,引入Jackson-databind依赖后,SpringMVC会自动添加Jackson的转换器。

 三、遇到的问题

通过地址栏注册用户的时候,明明地址输的没问题,可是却找不到,查看一下数据库,也可以插进记录。

@ResponseBody注解作用与原理_第2张图片

 下面是从数据库里查到的记录:

 最后发现忘加@ResponsBody,加上之后,就可以正常运行了

 

你可能感兴趣的:(调错问题,java,开发语言)