虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Java编程 > SpringBoot使用自定义json解析器的使用方法

SpringBoot使用自定义json解析器的使用方法
类别:Java编程   作者:码皇   来源:互联网   点击:

本篇文章主要介绍了SpringBoot使用自定义json解析器的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Spring-Boot是基于Spring框架的,它并不是对Spring框架的功能增强,而是对Spring的一种快速构建的方式。

Spring-boot应用程序提供了默认的json转换器,为Jackson。示例:

pom.xml中dependency配置:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qinker</groupId> <artifactId>spring-boot</artifactId> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent> <version>0.0.1-SNAPSHOT</version> <name>spring-boot</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>9</java.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <finalName>spring-boot</finalName> </build> </project>

创建三个类:MainApp.java和User.java以及HelloController.java:

    package com.springboot;
    import java.util.Date;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController public class HelloController {
    @RequestMapping("/hello") public String hello() {
    return "hello,SpringBoot";
    }
    /** * Spring boot 默认json解析框架是Jackson * @return */ @RequestMapping("/getUser") public User getUser() {
    User u = new User();
    u.setName("张三");
    u.setAge(33);
    u.setCreateTime(new Date());
    return u;
    }
    }
    package com.springboot;
    import java.io.Serializable;
    import java.util.Date;
    public class User implements Serializable{
    private String name;
    private int age;
    private Date createTime;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public Date getCreateTime() {
    return createTime;
    }
    public void setCreateTime(Date createTime) {
    this.createTime = createTime;
    }
    }
    package com.springboot;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    @SpringBootApplication public class MainApp{
    public static void main(String[] args) {
    SpringApplication.run(MainApp.class, args);
    }
    }

启动MainApp:访问http://localhost:8080/getUser,结果如下:

    {
    "name":"张三","age":33,"createTime":"2018-04-04T03:03:08.534+0000"}

可见:我们并未做任何配置,返回的却是json数据,可见Spring-Boot对json做了默认实现,使用的是内置Jackson转换器。

那么,下面看看如何使用自定义的json转换器,这里以fastjson为例:

首先,引入fastjson包,在pom中添加如下依赖:

    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>

为了方便看出效果:修改User类:

    package com.springboot;
    import java.io.Serializable;
    import java.util.Date;
    import com.alibaba.fastjson.annotation.JSONField;
    @SuppressWarnings("serial") public class User implements Serializable{
    private String name;
    private int age;
    @JSONField(format="yyyy-MM-dd HH:mm") private Date createTime;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public Date getCreateTime() {
    return createTime;
    }
    public void setCreateTime(Date createTime) {
    this.createTime = createTime;
    }
    }

1.实现fastjson自定义json转换的第一种方式,Spring-Boot实现WebMvcConventer接口:

修改MainApp如下: 

    package com.springboot;
    import java.util.ArrayList;
    import java.util.List;
    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.WebMvcConfigurer;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    @SpringBootApplication public class MainApp implements WebMvcConfigurer{
    @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    WebMvcConfigurer.super.configureMessageConverters(converters);
    //创建fastjson转换器实例 FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
    //配置对象 FastJsonConfig config = new FastJsonConfig();
    List<MediaType> mediaTypes = new ArrayList<>();
    //中文编码 MediaType mediaType = MediaType.APPLICATION_JSON_UTF8;
    mediaTypes.add(mediaType);
    config.setSerializerFeatures(SerializerFeature.PrettyFormat);
    converter.setSupportedMediaTypes(mediaTypes);
    converter.setFastJsonConfig(config);
    converters.add(converter);
    }
    public static void main(String[] args) {
    SpringApplication.run(MainApp.class, args);
    }
    }

启动程序:访问上面的路径:浏览器会看到如下结果:

    {
    "age":33, "createTime":"2018-04-04 11:14", "name":"张三" }

2.使用@Bean注解注入fastjson转换器:修改MainApp如下:

    package com.springboot;
    import java.util.ArrayList;
    import java.util.List;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
    import org.springframework.context.annotation.Bean;
    import org.springframework.http.MediaType;
    import com.alibaba.fastjson.serializer.SerializerFeature;
    import com.alibaba.fastjson.support.config.FastJsonConfig;
    import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
    @SpringBootApplication public class MainApp{
    @Bean public HttpMessageConverters fastJsonHttpMessageConventers() {
    FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
    FastJsonConfig config = new FastJsonConfig();
    config.setSerializerFeatures(SerializerFeature.PrettyFormat);
    List<MediaType> mediaTypes = new ArrayList<>();
    mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
    converter.setSupportedMediaTypes(mediaTypes);
    return new HttpMessageConverters(converter);
    }
    public static void main(String[] args) {
    SpringApplication.run(MainApp.class, args);
    }
    }

访问结果是一样的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • springboot json时间格式化处理的方法
  • SpringBoot学习之全局异常处理设置(返回JSON)
  • springboot实现FastJson解析json数据的方法
  • 详解SpringBoot多跨域请求的支持(JSONP)
  • Spring Boot使用FastJson解析JSON数据的方法
相关热词搜索: SpringBoot使用json解析器 SpringBoot jso