Spring Boot返回Json数据及数据封装 您所在的位置:网站首页 json转成类 Spring Boot返回Json数据及数据封装

Spring Boot返回Json数据及数据封装

#Spring Boot返回Json数据及数据封装| 来源: 网络整理| 查看: 265

1.1 简介

在项目开发中,接口与接口之间,前后端之间数据的传输都使用Json 格式,在Spring Boot中,接口返回 Json格式的数据很简单,在 Controller 中使用@RestController注解即可返回 Json格式的数据,@RestController也是 Spring Boot新增的一个注解,我们点进去看一下该注解都包含了哪些东西。

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { String value() default ""; }

 

可以看出, @RestController注解包含了原来的@Controller 和 @ResponseBody注解,使用过Spring 的朋友对@Controller 注解已经非常了解了,这里不再赘述,@ResponseBody注解是将返回的数据结构转换为Json格式。所以在默认情况下,使用了 @RestController注解即可将返回的数据结构转换成Json格式,Spring Boot中默认使用的Json解析技术框架是 jackson。我们点开pom.xml 中的 spring-boot-starter-web 依赖,可以看到一个 spring-boot-starter-json依赖:

org.springframework.boot spring-boot-starter-json 2.0.3.RELEASE compile

 

Spring Boot中对依赖都做了很好的封装,可以看到很多spring-boot-starter-xxx 系列的依赖,这是 Spring Boot的特点之一,不需要人为去引入很多相关的依赖了,starter-xxx系列直接都包含了所必要的依赖,所以我们再次点进去上面这个 spring-boot-starter-json依赖,可以看到:

com.fasterxml.jackson.core jackson-databind 2.9.6 compile com.fasterxml.jackson.datatype jackson-datatype-jdk8 2.9.6 compile com.fasterxml.jackson.datatype jackson-datatype-jsr310 2.9.6 compile com.fasterxml.jackson.module jackson-module-parameter-names 2.9.6 compile

 

到此为止,我们知道了Spring Boot 中默认使用的json解析框架是jackson。下面我们看一下默认的 jackson框架对常用数据类型的转Json处理。1.2 Spring Boot 默认对Json的处理

在实际项目中,常用的数据结构无非有类对象、List对象、Map对象,我们看一下默认的jackson 框架对这三个常用的数据结构转成 json后的格式如何。1.2.1 创建 User实体类

为了测试,我们需要创建一个实体类,这里我们就用 User 来演示。

public class User { private Long id; private String username; private String password; /* 省略get、set和带参构造方法 */ }

 

1.2.2 创建Controller类

然后我们创建一个 Controller,分别返回User对象、List和 Map。

@RestController @RequestMapping("/json") public class JsonController { @RequestMapping("/user") public User getUser() { return new User(1, "倪升武", "123456"); } @RequestMapping("/list") public List getUserList() { List userList = new ArrayList(); User user1 = new User(1, "倪升武", "123456"); User user2 = new User(2, "达人课", "123456"); userList.add(user1); userList.add(user2); return userList; } @RequestMapping("/map") public Map getMap() { Map map = new HashMap(3); User user = new User(1, "倪升武", "123456"); map.put("作者信息", user); map.put("博客地址", "http://"); map.put("CSDN地址", "http://"); map.put("粉丝数量", 4153); return map; } }

 

1.2.3 测试不同数据类型返回的json

OK,写好了接口,分别返回了一个User 对象、一个List集合和一个Map集合,其中Map 集合中的 value存的是不同的数据类型。接下来我们依次来测试一下效果。

在浏览器中输入:localhost:8080/json/user返回 json 如下:

{"id":1,"username":"倪升武","password":"123456"}

    1

在浏览器中输入:localhost:8080/json/list返回 json 如下:

[{"id":1,"username":"倪升武","password":"123456"},{"id":2,"username":"达人课","password":"123456"}]

    1

在浏览器中输入:localhost:8080/json/map 返回 json 如下:

{"作者信息":{"id":1,"username":"倪升武","password":"123456"},"CSDN地址":"http://blog.csdn.net/eson_15","粉丝数量":4153,"博客地址":"http://blog.itcodai.com"}

    1

可以看出,map中不管是什么数据类型,都可以转成相应的json格式,这样就非常方便。

1.2.4 jackson 中对null的处理

在实际项目中,我们难免会遇到一些 null值出现,我们转json 时,是不希望有这些 null出现的,比如我们期望所有的null在转json时都变成“”这种空字符串,那怎么做呢?在Spring Boot中,我们做一下配置即可,新建一个jackson 的配置类:

import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import java.io.IOException; @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() { @Override public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeString(""); } }); return objectMapper; } }

 

然后我们修改一下上面返回map 的接口,将几个值改成null测试一下:

@RequestMapping("/map") public Map getMap() { Map map = new HashMap(3); User user = new User(1, "倪升武", null); map.put("作者信息", user); map.put("博客地址", "http://"); map.put("CSDN地址", null); map.put("粉丝数量", 4153); return map; }

 

重启项目,再次输入:localhost:8080/json/map,可以看到jackson已经将所有null字段转成了空字符串了。

{"作者信息":{"id":1,"username":"倪升武","password":""},"CSDN地址":"","粉丝数量":4153,"博客地址":"http://blog.itcodai.com"}

    1

1.3 使用阿里巴巴FastJson的设置1.3.1 jackson和fastJson的对比

有很多朋友习惯于使用阿里巴巴的fastJson 来做项目中 json转换的相关工作,目前我们项目中使用的就是阿里的fastJson,那么jackson 和 fastJson 有哪些区别呢?根据网上公开的资料比较得到下表。

选项fastJsonjackson 上手难易程度 容易 中等 高级特性支持 中等 丰富 官方文档、Example支持 中文 英文 处理json速度 略快 快

 

1.3.2 fastJson依赖导入

使用fastJson 需要导入依赖,本课程使用1.2.35 版本,依赖如下:

com.alibaba fastjson 1.2.35

 

1.3.3 使用fastJson处理null

使用fastJson 时,对 null的处理和jackson有些不同,需要继承WebMvcConfigurationSupport 类,然后覆盖 configureMessageConverters方法,在方法中,我们可以选择对要实现 null转换的场景,配置好即可。如下:

import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @Configuration public class fastJsonConfig extends WebMvcConfigurationSupport { /** * 使用阿里 FastJson 作为JSON MessageConverter * @param converters */ @Override public void configureMessageConverters(List


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有