中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

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

 山东大明消毒科技有限公司

下载贤集网APP入驻自媒体

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{

[url=home.php?mod=space&uid=4377]@Bean[/url]

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);

}

}

复制代码

访问结果是一样的。

以上就是本文的全部内容,希望对大家的学习有所帮助,


最新回复

还没有人回复哦,抢沙发吧~

发布回复

为您推荐

热门交流