最新公告
  • 欢迎您光临陌佑网,提供代搭建与我们一样的资源站,系统搭建出售开通SVIP
  • 江帅帅:精通 Spring Boot 系列 05

    广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪
    广告!请自辨真伪 广告!请自辨真伪 广告!请自辨真伪
    广告!请自辨真伪

    Spring Boot 处理 JSON 数据
    JSON 是目前主流的前后端数据传输方式,当 Controller 中返回的是一个 Java 对象或 List 集合时,Spring Boot 将自动把它转换成 JSON 数据。

    Spring Boot 中内置了 JSON 解析功能,当你在项目中,添加了 spring-boot-starter-web 模块之后,即可看到默认包含 Jackson 解析器,也可以换成 Fastjson 等其他解析器。

    1. 编辑 Book 类
    2. class Book {
    private Integer id;
    private String name;
    private String author;
    @JsonIgnore
    private Float price;
    @JsonFormat(pattern = \\\"yyyy-MM-dd\\\")
    private Date bookPublicationDate;
    
    // getter 和 setter 方法

    }

    1. 编辑 BookController
      返回数据的时候,需要使用 @ResponseBody 注解。如果经常使用 @Controller 和 @ResponseBody 注解,则可以使用 @RestController 组合注解来替代。

    @RestController
    public class BookController {

    @GetMapping(\\\"/book\\\")
    public Book book(){
        Book book = new Book();
        book.setId(1);
        book.setName(\\\"《码农翻身:用故事给技术加点料》\\\");
        book.setAuthor(\\\"刘欣\\\");
        book.setPrice(69f);
        book.setBookPublicationDate(new Date());
    
        return book;
    }

    }
    运行之后,直接地址栏中访问 http://localhost:8080/book,即可看到返回的 JSON 数据。

    1.jpg

    1. 转换集合数据
      添加 getBooks() 方法,创建一个 List 集合,存放三本书。具体源码如下:

    @RequestMapping(\\\”/getBooks\\\”)
    public List getBooks() {

    List<Book> bookList = new ArrayList<>();
    
    Book book1 = new Book();
    book1.setId(1);
    book1.setName(\\\"《码农翻身:用故事给技术加点料》\\\");
    book1.setAuthor(\\\"刘欣\\\");
    book1.setPrice(69f);
    book1.setBookPublicationDate(new Date());
    
    Book book2 = new Book();
    book2.setId(2);
    book2.setName(\\\"《漫画算法:小灰的算法之旅(全彩)》\\\");
    book2.setAuthor(\\\"魏梦舒\\\");
    book2.setPrice(79f);
    book2.setBookPublicationDate(new Date());
    
    Book book3 = new Book();
    book3.setId(3);
    book3.setName(\\\"《未来架构》\\\");
    book3.setAuthor(\\\"张亮\\\");
    book3.setPrice(99f);
    book3.setBookPublicationDate(new Date());
    
    bookList.add(book1);
    bookList.add(book2);
    bookList.add(book3);
    
    return bookList;

    }
    运行之后,直接地址栏中访问 http://localhost:8080/getBooks,即可看到 getBooks() 方法创建多个 Book 对象封装在 List 集合中并将 JSON 数据返回到客户端。

    2.jpg

    1. 更换转换器
      1)使用 Gson

    Gson 是 Google 的开源 JSON 解析器,添加依赖的时候先要去除默认的 jackson,具体如下:

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </exclusion>
    </exclusions>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>

    在 Gson 转换时,如果需要格式化日期数据,则需要自定义 HttpMessageConverter,接着提供一个 GsonHttpMessageConverter 即可,具体如下:

    @Configuration
    public class GsonConfig {

    @Bean
    GsonHttpMessageConverter gsonHttpMessageConverter() {
        GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
        GsonBuilder builder = new GsonBuilder();
        builder.setDateFormat(\\\"yyyy-MM-dd\\\");
        builder.excludeFieldsWithModifiers(Modifier.PROTECTED);
        Gson gson = builder.create();
        converter.setGson(gson);
    
        return converter;
    }

    }
    修改 Book 类,具体如下:

    public class Book {

    private Integer id;
    private String name;
    private String author;
    protected Float price;
    private Date bookPublicationDate;
    
    // getter 和 setter 方法

    }
    运行之后,直接地址栏中访问 http://localhost:8080/getBooks,效果如图:

    3.jpg

    2)使用 fastjson
    fastjson 是阿里巴巴的开源 JSON 解析器,也是目前速度最快的 JSON 解析器,整合之后需要提供相应的 HttpMessageConverter 才能使用,添加依赖,具体如下:

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </exclusion>
    </exclusions>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>

    接着,添加 fastjson 的 HttpMessageConverter,具体如下:

    @Configuration
    public class NXFastJsonConfig {

    @Bean
    FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setDateFormat(\\\"yyyy-MM-dd\\\");
        config.setCharset(Charset.forName(\\\"UTF-8\\\"));
        config.setSerializerFeatures(
                SerializerFeature.WriteClassName,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty
        );
        converter.setFastJsonConfig(config);
        return converter;
    }

    }
    再来 application.properties 中配置一个响应编码,具体如下:

    spring.http.encoding.force-response=true
    运行之后,直接地址栏中访问 http://localhost:8080/getBooks,效果如图:

    4.jpg
    本文来源于:奈学开发者社区-江帅帅


    陌佑网 » 江帅帅:精通 Spring Boot 系列 05

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 142会员总数(位)
    • 16688资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 656稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情