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数据的方法
(0)

相关推荐

  • Spring Boot使用FastJson解析JSON数据的方法

    个人使用比较习惯的json框架是fastjson,所以spring boot默认的json使用起来就很陌生了,所以很自然我就想我能不能使用fastjson进行json解析呢? 1.引入fastjson依赖库: <!--添加fastjson解析JSON数据--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <versio

  • SpringBoot学习之全局异常处理设置(返回JSON)

    SpringBoot学习--全局异常处理设置(返回JSON) 需求 现在习惯使用ajax的方式发起请求,所以经常需要服务端返回一个json或者字符串. 控制全局的异常处理. 如果在单个方法中使用try,catch把方法包裹起来,工作量大,而且会异常的抛出而导致@Transactional注解的方法事务不会回滚. 说明 使用@ControllerAdvice注解 使用@ExceptionHandler注解 @ControllerAdvice 该注解是spring2.3以后新增的一个注解,主要是用来

  • springboot实现FastJson解析json数据的方法

    最近在研究springboot实现FastJson解析json数据的方法,那么今天也算个学习笔记吧! 添加jar包: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> 两种方式启动加载类: 第一种继承WebMvcConfigur

  • 详解SpringBoot多跨域请求的支持(JSONP)

    在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBodyAdvice的类用来支持jsonp的数据(SpringBoot接收解析web请求是依赖于SpringMVC实现的).下面我们就看一下怎么用AbstractJsonpResponseBodyAdvice来支持跨域请求. 使用AbstractJsonpResponseBodyAdvice来支持跨域请求

  • springboot json时间格式化处理的方法

    application.properties中加入如下代码 springboot 默认使用 jackson 解析 json spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 如果个别实体需要使用其他格式的 pattern,在实体上加入注解即可 import org.springframework.format.annotation.DateTimeFormat; import com.fas

  • 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"

  • 详解如何在SpringBoot中自定义参数解析器

    目录 前言 1.自定义参数解析器 2.PrincipalMethodArgumentResolver 3.RequestParamMapMethodArgumentResolver 4.小结 前言 在一个 Web 请求中,参数我们无非就是放在地址栏或者请求体中,个别请求可能放在请求头中. 放在地址栏中,我们可以通过如下方式获取参数: String javaboy = request.getParameter("name "); 放在请求体中,如果是 key/value 形式,我们可以通

  • Go语言JSON解析器gjson使用方法详解

    目录 gjson 安装 使用 gjson GJSON 是一个Go包,它提供了一种从json文档中获取值的快速简单的方法.它具有单行检索.点符号路径.迭代和解析 json 行等功能. 还可以查看SJSON以修改 json,以及JJ命令行工具. 本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法. github 的地址在这里. 安装 安装gjson,使用的是go传统的安装方法: go install github.com/tidwall/gjson@latest 在文

  • SpringBoot项目实用功能之实现自定义参数解析器

    核心点 1.实现接口 org.springframework.web.method.support.HandlerMethodArgumentResolver supportsParameter 方法根据当前方法参数决定是否需要应用当前这个参数解析器 resolveArgument 执行具体的解析过程 2.将自实现的参数解析器类 添加到Spring容器中 3.实现 org.springframework.web.servlet.config.annotation.WebMvcConfigurer

  • 使用自定义参数解析器同一个参数支持多种Content-Type

    目录 一堆废话 探究Springmvc参数解析器工作流程 不想看废话的可以直接进结果 补充 一堆废话 事出有因, 原先上线的接口现在被要求用Java重写,按照原暴露出去的文档然后毫无疑问的,按照Java的惯例, 一定是@RequestBody然后去接收application/json;charset=utf-8,然后一通参数接收处理逻辑. 结果测试都通过了,上线的时候,刚把原接口切到新接口上,日志就狂飙 application/x-www-form-urlencoded:charset=utf-

  • C#实现JSON解析器MojoUnityJson功能(简单且高效)

    MojoUnityJson 是使用C#实现的JSON解析器 ,算法思路来自于游戏引擎Mojoc的C语言实现 Json.h .借助C#的类库,可以比C的实现更加的简单和全面,尤其是处理Unicode Code(\u开头)字符的解析,C#的StringBuilder本身就支持了UnicodeCodePoint. MojoUnityJson使用递归下降的解析模式,核心解析代码只有450行(去掉空行可能只有300多行),支持标准的JSON格式.算法实现力求简洁明了,用最直接最快速的方法达到目的,没有复杂

  • Spring自定义参数解析器代码实例

    这篇文章主要介绍了Spring自定义参数解析器代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 结合redis编写User自定义参数解析器UserArgumentResolver import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation

  • c# 如何实现一个简单的json解析器

    一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更少等.在 web 应用开发领域内,得益于 JavaScript 对 JSON 提供的良好支持,JSON 要比 XML 更受开发人员青睐.所以作为开发人员,如果有兴趣的话,还是应该深入了解一下 JSON 相关的知识.本着探究 JSON 原理的目的,我将会在这篇文章中详细向大家介绍一个简单的JSON解析

  • 实例详解SpringBoot默认的JSON解析方案

    目录 一.什么是JSON 二.如何在SpringBoot中使用JSON 三.举例 四.拓展 总结 一.什么是JSON JSON(JavaScript Object Notation)是一种基于JavaScript语法子集的开放标准数据交换格式.JSON是基于文本的,轻量级的,通常被认为易于读/写. 好了,废话不多说,下面开始介绍如何在SpringBoot中使用JSON. 二.如何在SpringBoot中使用JSON 在学习json之前,我们必须先了解一下HttpMessageConverter,

  • 三种Java自定义DNS解析器方法与实践

    目录 1.InMemoryDnsResolver 2.SystemDefaultDnsResolver 3.自定义DnsResolver 4.连接池管理器 5.测试 前言: 最近终于用上了高性能的测试机(54C96G * 3),相较之前的单机性能提升了三倍,数量提升了三倍,更关键的宽带提单机升了30倍不止,总体讲提升了100多倍,这下再也不用担心单机压力机瓶颈,直接原地起飞. 不过没高兴5分钟,我发现接口居然请求不通,经过一阵拨乱反正终于找到原因:域名无法解析,IP无法直接访问. 自然而然,解决

随机推荐