Spring Boot返回JSON数据(三种方式)

Spring Boot返回JSON数据(三种方式)

  • 默认实现
  • 使用Gson
  • 使用fastjson

1. 默认实现

​ spring-boot-starter-web依赖默认加入了jackson-databind作为json处理器,此时不需要添加额外的JSON处理器就能返回一段JSON了。

​ 创建一个Book实体类:

package com.itlearn.springboot06json.beans;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.util.Date;

@Data
public class Book {
    private String name;
    private String author;
    @JsonIgnore
    private Double price;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date cationDate;
}
  • @JsonIgnore:转换json的时候忽略此属性

  • @JsonFormat(pattern = “yyyy-MM-dd”):对该属性的值进行格式化

    创建BookController,返回Book对象

@RestController
public class BookController {

    @GetMapping("/book")
    public Book book(){
        Book book = new Book();
        book.setName("三国演义");
        book.setAuthor("罗贯中");
        book.setPrice(30D);
        book.setCationDate(new Date());
        return book;
    }

页面显示如下:

{"name":"三国演义","author":"罗贯中","cationDate":"2021-05-03"}

2. 使用Gson

​ Gson是Google的一个开源JSON解析框架。使用Gson,需要先除去默认的jackson-databind,然后加入Gson依赖。

<dependency>
    <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>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</dependency>

​ 由于Spring Boot中默认提供了Gson的自动转换类:GsonHttpMessageConvertersConfigureation,因此Gson依赖添加后,可以像使用Jackson-databind那样直接使用Gson。**但是在Gson进行转换时,如果想对日期进行格式化,那么还需要开发者自定义HttpMessageConverter。**如下:

package com.itlearn.spriingboot06gson.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.GsonHttpMessageConverter;

import java.lang.reflect.Modifier;

@Configuration
public class GsonConfig {
    @Bean
    public 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;
    }
}
  • 开发者自己提供的一个GsonHttpMessageConverter实例

  • 设置了Gson解析日期的转化格式

  • 设置Gson解析时修饰符为protected的字段被过滤掉。(可自行选择)

    创建Book实例

@Data
public class Book {
    private String name;
    private String author;
    protected Double price;
    private Date cationDate;
}

​ 添加Controller:

@RestController
public class BookController {

    @GetMapping("/book")
    public Book book(){
        Book book = new Book();
        book.setName("三国演义");
        book.setAuthor("罗贯中");
        book.setPrice(30D);
        book.setCationDate(new Date());
        return book;
    }
}

页面打开如下:

{"name":"三国演义","author":"罗贯中","cationDate":"2021-05-03"}

3. 使用fastjson(两种方式)

​ fastjson是阿里巴巴的一个开源JSON解析框架,是目前JSON解析速度最快的开源框架。Spring Boot继承fastjson后不能立马使用,需要开发者提供HttpMessageConverter后才能使用,继承步骤如下:

首先除去jackson-databind依赖,引入fastjson依赖:

<dependency>
    <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>
</dependency>

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

3.1. 使用配置fastjson的HttpMessageConverter

配置fastjson的HttpMessageConverter

@Configuration
public class MyFastJsonConfig {
    @Bean
    public FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setDateFormat("yyyy-MM-dd");
        config.setCharset(Charset.forName("UTF-8"));
        /*
         * WriteClassName:是否在生成的JSON中输出类名
         * WriteMapNullValue:是否输出value为null的数据
         * PrettyFormat:生成的JSON格式化
         * WriteNullListAsEmpty:空集合输出[]而非null
         * WriteNullStringAsEmpty:空字符串输出“”而非null
         */

        config.setSerializerFeatures(
                SerializerFeature.WriteClassName,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullStringAsEmpty
        );
        converter.setFastJsonConfig(config);
        return converter;
    }
}
  • 自定义MyFastJsonConfig,完成对FastJsonHttpMessageConverter Bean的提供

配置响应编码:

server.port=8081
#编码格式
server.servlet.encoding.force=true
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8

Controller、Bean同上

页面输出如下:

{ "@type":"com.itlearn.springboot06fastjson.beans.Book", "author":"罗贯中", "cationDate":"2021-05-03", "name":"三国演义", "price":30.0D }

3.2. 实现WebMvcConfigure接口

​ 在Spring Boot项目中,当开发者引入spring-boot-starter-web依赖后,该依赖又依赖了spring-boot-autoconfigure,在这个自动化配置中,有一个WebMvcAutoConfigureation类提供了对Spring MVC最基本的配置,如果某一项自动化配置不满足开发需求,开发者可针对该项目自定义配置,只需要实现WebMvcConfigurer接口即可。(spring 5.0之前是通过继承WebMvcConfigurerAdapter类实现的)

@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        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);
        converters.add(converter);
    }
}

页面显示:

{ "@type":"com.itlearn.springboot06fastjson.beans.Book", "author":"罗贯中", "cationDate":"2021-05-03", "name":"三国演义", "price":30.0D }
可以使用Spring Boot中的JPA(Java Persistence API)实现将JSON数据写入MySQL数据库。JPA提供了一种简单的方式来管理对象关系映射(ORM),即将Java对象映射到关系型数据库中的表。 以下是一个简单的示例: 1. 创建一个实体类,用于映射JSON数据数据库表中的字段。 ```java @Entity @Table(name = "person") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; // getters and setters } ``` 2. 创建一个Spring Data JPA repository接口,用于定义CRUD操作。 ```java @Repository public interface PersonRepository extends JpaRepository<Person, Long> { } ``` 3. 在Controller中获取JSON数据,并将其转换为Person对象,然后使用PersonRepository将其保存到数据库中。 ```java @RestController @RequestMapping("/person") public class PersonController { @Autowired private PersonRepository personRepository; @PostMapping("/save") public void savePerson(@RequestBody Person person) { personRepository.save(person); } } ``` 这里假设JSON数据的格式与Person类的属性相匹配。如果不匹配,可以使用Jackson库进行转换。 另外,需要在application.properties文件中配置MySQL数据库连接信息,例如: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=myusername spring.datasource.password=mypassword spring.datasource.driver-class-name=com.mysql.jdbc.Driver ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值