SpringMVC框架学习(十七)——返回JSON

返回JSON

1、 @ResponseBody

@ResponseBody注解用于将Controller类的方法返回的对象,通过HttpMessageConverter接口转换为指定格式的数据如:json、xml等,通过Response响应给客户端。

JSON解析需要专业的工具,目前主流的 JSON 处理工具主要有三种:

  • Jackson
    开源的Jackson,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。
  • Gson
    Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。
  • fFastjson
    Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。

在 SpringMVC 中,对 jackson 和 gson 都提供了相应的支持,就是如果使用这两个作为 JSON 转换器,只需要添加对应的依赖就可以了,返回的对象和返回的集合、Map 等都会自动转为 JSON,但是,如果使用 fastjson,除了添加相应的依赖之外,还需要自己手动配置 HttpMessageConverter 转换器。其实前两个也是使用 HttpMessageConverter 转换器,但是是 SpringMVC 自动提供的,SpringMVC 没有给 fastjson 提供相应的转换器。

下面以Jackson为例:
1、添加依赖:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.4</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.1</version>
        </dependency>

2、表单提交数据:

<form method="post" action="four">
    姓名:<input type="text" name="name"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交"><br>
</form>

3、controller:

    @RequestMapping("/four")
    @ResponseBody
    public User1 test3(User1 user) throws Exception{
        return user;
    }

4、访问页面的结果:
在这里插入图片描述
在这里插入图片描述
Gson、FastJson这里就不再赘述了,参考下面文章:
http://springmvc.javaboy.org/2019/1115/return-json

2、@RestController

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面。

(1)、如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
(2)、 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

上面的例子,使用@RestController注解代替@Controller和@ResponseBody注解效果是一个的:

@RestController
public class RestControllerTest {
    @RequestMapping("/rest")
    public User1 test3(User1 user) throws Exception{
        return user;
    }
}

在这里插入图片描述

发布了61 篇原创文章 · 获赞 0 · 访问量 607

猜你喜欢

转载自blog.csdn.net/weixin_44075963/article/details/103723913
今日推荐