SpringBoot使用自定义json解析器的使用方法

 更新时间:2018年04月04日 11:33:47   作者:lory_li  
本篇文章主要介绍了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); 
 } 
} 

访问结果是一样的。

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

相关文章

  • Java基础之java处理ip的工具类

    Java基础之java处理ip的工具类

    这篇文章主要介绍了Java基础应用,使用java处理ip的工具类的相关资料,需要的朋友可以参考下
    2014-10-10
  • SpringBoot @ExceptionHandler与@ControllerAdvice异常处理详解

    SpringBoot @ExceptionHandler与@ControllerAdvice异常处理详解

    在Spring Boot应用的开发中,不管是对底层数据库操作,对业务层操作,还是对控制层操作,都会不可避免的遇到各种可预知的,不可预知的异常需要处理,如果每个处理过程都单独处理异常,那么系统的代码耦合度会很高,工作量大且不好统一,以后维护的工作量也很大
    2022-10-10
  • Java并发中的Fork/Join 框架机制详解

    Java并发中的Fork/Join 框架机制详解

    本文主要介绍了 Java 并发框架中的 Fork/Join 框架的基本原理和其使用的工作窃取算法(work-stealing)、设计方式和部分实现源码,感兴趣的朋友跟随小编一起看看吧
    2021-07-07
  • java判读数组中是否有重复值的示例

    java判读数组中是否有重复值的示例

    这篇文章主要介绍了java判读数组中是否有重复值的示例,需要的朋友可以参考下
    2014-04-04
  • 详解Spring Boot 项目中的 parent

    详解Spring Boot 项目中的 parent

    这篇文章主要介绍了Spring Boot中parent作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 详解SpringCloudGateway内存泄漏问题

    详解SpringCloudGateway内存泄漏问题

    这篇文章主要介绍了详解SpringCloudGateway内存泄漏问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 利用Jmeter发送Java请求的实战记录

    利用Jmeter发送Java请求的实战记录

    JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,下面这篇文章主要给大家介绍了关于如何利用Jmeter发送Java请求的相关资料,需要的朋友可以参考下
    2021-09-09
  • MyBatis查询结果resultType返回值类型的说明

    MyBatis查询结果resultType返回值类型的说明

    这篇文章主要介绍了MyBatis查询结果resultType返回值类型的说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • springboot中server.ssl.key-store配置路径的问题小结

    springboot中server.ssl.key-store配置路径的问题小结

    这篇文章主要介绍了springboot中server.ssl.key-store配置路径的问题,文中还记录了Spring Boot SSL(https)实例,介绍在web程序中使用自签名的SSL(HTTPS)证书及创建SSL认证,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • Spring Boot调用 Shell 脚本实现看门狗功能

    Spring Boot调用 Shell 脚本实现看门狗功能

    这篇文章主要介绍了Spring Boot调用 Shell 脚本实现看门狗功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论