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);
    }
}
Spring boot之JSON(二)_第1张图片
image.png

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

Spring boot使用FastJson解析JSON数据

引入fastjson依赖库

 
      com.alibaba
      fastjson
      1.2.41
 

这里要说下很重要的话,官方文档说的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> converters) {
        super.configureMessageConverters(converters);
        //1.需要先定义一个convert消息转换的对象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        //2.添加fastJson的配置信息,比如:要格式化返回的json数据
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat
        );
        //3.处理中文乱码问题
        List 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;
    }
}
Spring boot之JSON(二)_第2张图片
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 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);
    }
}

你可能感兴趣的:(Spring boot之JSON(二))