专栏首页郭少华Spring boot之JSON(二)

Spring boot之JSON(二)

Spring boot 返回json数据

编写实体类Student

import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * 这是一个测试实体类
 */
public class Student {
    private String id;
    private String name;
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date   birthdate;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthdate() {
        return birthdate;
    }

    public void setBirthdate(Date birthdate) {
        this.birthdate = birthdate;
    }
}

Springboot默认使用jackson解析json日期类型序列化格式需要在时间属性上加 @JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd") 是将String转换成Date,一般前台给后台传值时用 @DateTimeFormat(pattern="yyyy-MM-dd") 是将Date转换成String 一般后台传值给前台时使用

编写getStudent方法

package com.springboot.backstage.controller;
import com.springboot.backstage.entity.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

//SpringBoot提供了refult风格
// @RestController相当于@Controller和@ResponseBody
@RestController
public class HellController {

 
    /**
     * Springbootm默认使用jackson解析json
     * @return
     */
    @RequestMapping("/getStudent")
    public Student getStudent(){
        Student student =new Student();
        student.setId("1");
        student.setName("张三");
        student.setBirthdate(new Date());
        return student;
    }

}

运行main函数测试

@SpringBootApplication
public class SpringBootApp extends WebMvcConfigurerAdapter {
  public static void main(String[] args) {
       SpringApplication.run(SpringBootApp.class,args);
    }
}

image.png

这里推荐一个google浏览器插件(JSON Viewer)可以更清楚的展示json数据

Spring boot使用FastJson解析JSON数据

引入fastjson依赖库

 <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.41</version>
 </dependency>

这里要说下很重要的话,官方文档说的1.2.10以后,会有两个方法支持HttpMessageconvert,一个是FastJsonHttpMessageConverter,支持4.2以下的版本,一个是FastJsonHttpMessageConverter4支持4.2以上的版本,具体有什么区别暂时没有深入研究。这里也就是说:低版本的就不支持了,所以这里最低要求就是1.2.10+。

第一种方法

第一种方法就是: (1)启动类继承extends WebMvcConfigurerAdapter (2)覆盖方法configureMessageConverters

代码

package com.springboot.backstage.controller;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class SpringBootApp extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        //1.需要先定义一个convert消息转换的对象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        //2.添加fastJson的配置信息,比如:要格式化返回的json数据
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat
        );
        //3.处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        //4.在convert中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
        converters.add(fastConverter);
    }
 public static void main(String[] args) {
       SpringApplication.run(SpringBootApp.class,args);
    }
}

测试

把Student类的date对象改成能接收fastjson返回的date如果被格式化说明已经使用fastjson解析 @JSONField(format = "yyyy-MM-dd") fastjson另一个参数可以让属性不参与序列化 @JSONField(serialize=false)

package com.springboot.backstage.entity;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;

/**
 * 这是一个测试实体类
 */
public class Student {
    private String id;
    private String name;
    @JSONField(format = "yyyy-MM-dd")
    private Date   birthdate;
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthdate() {
        return birthdate;
    }

    public void setBirthdate(Date birthdate) {
        this.birthdate = birthdate;
    }
}

image.png

第二种方法

在这里使用@Bean注入FastJsonHttpMessageConverter

代码

package com.springboot.backstage.controller;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class SpringBootApp  {
    /**
     * 在这里使用@Bean注入FastJsonHttpMessageConverter
     * @return
     */
    @Bean
    public  HttpMessageConverters fastJsonHttpMessageConverter(){
        //1.需要先定义一个convert消息转换的对象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //2.添加fastJson的配置信息,比如:要格式化返回的json数据
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        //3.处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);

        //4.在convert中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);

        HttpMessageConverter<?> converter = fastConverter;
        return new HttpMessageConverters(converter);


    }

    public static void main(String[] args) {
       SpringApplication.run(SpringBootApp.class,args);
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Security项目Spring MVC开发RESTful API(二)

    楠楠
  • Vue实战开发

    4.新建Fwsb组件,这个相当于程序员的入口文件。在src/components/目录下新建Fwsb.vue文件。文件内容

    楠楠
  • JVM内存区域

    Native方法常用于两种情况: (1)在方法中调用一些不是由java语言写的代码。 (2)在方法中用java语言直接操纵计算机硬件

    楠楠
  • SpringCloud微服务实战系列(十八)Ouath2在真实场景中的应用之授权服务器

    在《SpringCloud微服务实战系列(十七)Ouath2在真实场景中的应用之资源服务器》]中

    品茗IT
  • editormd实现Markdown编辑器写文章功能

    想在项目里引入Markdown编辑器实现写文章功能,网上找到一款开源的插件editormd.js

    SmileNicky
  • 基于Springboot+jpa+thymeleaf+rabbit+SpringBoot mail 的简单项目

    Springboot+jpa+thymeleaf+rabbit 紧跟要求, 不需要使用Mybatis, 也不需要使用Eureka!!! 使用Rabbi...

    时间静止不是简史
  • SpringBoot整合SpringSecurity简单实现登入登出从零搭建

    技术栈 : SpringBoot + SpringSecurity + jpa + freemark ,完整项目地址 : https://github.com/...

    EalenXie
  • 轻松上手SpringBoot Security + JWT Hello World示例

    在本教程中,我们将开发一个Spring Boot应用程序,该应用程序使用JWT身份验证来保护公开的REST API。在此示例中,我们将使用硬编码的用户和密码进行...

    sanshengshui
  • Redis整合Spring项目搭建实例

    本文介绍了如何使用注解的方式,将Redis缓存整合到你的Spring项目。 首先我们将使用jedis驱动,进而开始配置我们的Gradle。 group 'com...

    CSDN技术头条
  • Spring Cloud 入门教程2、服务消费者(Ribbon)

    Ribbon是Netflix开源的实现了负载均衡等功能的RPC客户端。 支持HTTP、TCP、UDP协议,且有一定的容错、缓存等机制。

    KenTalk

扫码关注云+社区

领取腾讯云代金券