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

简介: Spring Boot中,@RestController注解可自动将数据转为JSON格式,其底层默认使用Jackson框架。该注解等价于@Controller与@ResponseBody结合,简化开发。Jackson支持对象、List、Map等常见数据结构的JSON转换,并可通过配置自定义null值处理方式,如将null转为空字符串,提升接口返回的规范性与前端友好性。(238字)

在项目开发中,接口与接口之间,前后端之间数据的传输都使用 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. Spring Boot 默认对Json的处理
    在实际项目中,常用的数据结构无非有类对象、List对象、Map对象,我们看一下默认的 jackson 框架对这三个常用的数据结构转成 json 后的格式如何。
    1.1 创建 User 实体类
    为了测试,我们需要创建一个实体类,这里我们就用 User 来演示。
    public class User {
    private Long id;
    private String username;
    private String password;
    / 省略get、set和带参构造方法 /
    }
    1.2 创建Controller类
    然后我们创建一个 Controller,分别返回 User对象、List 和 Map。
    import com.itcodai.course02.entity.User;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    @RestController
    @RequestMapping("/json")
    public class JsonController {
    @RequestMapping("/user")
    public User getUser() {
     return new User(1, "倪升武", "123456");
    
    }
    @RequestMapping("/list")
    public List getUserList() {
     List<User> 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<String, Object> map = new HashMap<>(3);
     User user = new User(1, "倪升武", "123456");
     map.put("作者信息", user);
     map.put("博客地址", "http://blog.itcodai.com");
     map.put("CSDN地址", "http://blog.csdn.net/eson_15");
     map.put("粉丝数量", 4153);
     return map;
    
    }
    }
    1.3 测试不同数据类型返回的json
    OK,写好了接口,分别返回了一个 User 对象、一个 List 集合和一个 Map 集合,其中 Map 集合中的 value 存的是不同的数据类型。接下来我们依次来测试一下效果。
    在浏览器中输入:localhost:8080/json/user 返回 json 如下:
    {"id":1,"username":"倪升武","password":"123456"}
    在浏览器中输入:localhost:8080/json/list 返回 json 如下:
    [{"id":1,"username":"倪升武","password":"123456"},{"id":2,"username":"达人课","password":"123456"}]
    在浏览器中输入:localhost:8080/json/map 返回 json 如下:
    {"作者信息":{"id":1,"username":"倪升武","password":"123456"},"CSDN地址":"http://blog.csdn.net/eson_15","粉丝数量":4153,"博客地址":"http://blog.itcodai.com"}
    可以看出,map 中不管是什么数据类型,都可以转成相应的 json 格式,这样就非常方便。
    1.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<Object>() {
         @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://blog.itcodai.com");
    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"}
相关文章
|
2月前
|
JSON 前端开发 Java
Spring Boot 返回 JSON 数据及数据封装
本课讲解Spring Boot中JSON处理:通过@RestController返回JSON,利用内置Jackson实现对象、List、Map自动序列化,并自定义配置优雅处理null值,提升前后端交互体验。
|
12月前
在使用async/await时,如果异步操作本身没有抛出错误,但是在后续的同步代码中出现了错误,该如何处理?
在使用async/await时,如果异步操作本身没有抛出错误,但是在后续的同步代码中出现了错误,该如何处理?
471 153
|
5月前
|
Java Spring
如何优化Java异步任务的性能?
本文介绍了Java中四种异步任务实现方式:基础Thread、线程池、CompletableFuture及虚拟线程。涵盖多场景代码示例,展示从简单异步到复杂流程编排的演进,适用于不同版本与业务需求,助你掌握高效并发编程实践。(239字)
313 6
|
监控 算法 Java
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Gauge和Histogram篇)
【深度挖掘Java性能调优】「底层技术原理体系」深入探索Java服务器性能监控Metrics框架的实现原理分析(Gauge和Histogram篇)
316 0
|
前端开发 JavaScript Java
Spring Boot中的数据校验
Spring Boot中的数据校验
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
1456 8
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
565 6
|
存储 Java 计算机视觉
如何在Spring Boot中实现图像上传和处理
如何在Spring Boot中实现图像上传和处理
|
JSON Java API
解码Spring Boot与JSON的完美融合:提升你的Web开发效率,实战技巧大公开!
【8月更文挑战第29天】Spring Boot作为Java开发的轻量级框架,通过`jackson`库提供了强大的JSON处理功能,简化了Web服务和数据交互的实现。本文通过代码示例介绍如何在Spring Boot中进行JSON序列化和反序列化操作,并展示了处理复杂JSON数据及创建RESTful API的方法,帮助开发者提高效率和应用性能。
789 0
|
Java Apache 开发者
介绍BeanUtils.copyProperties方法
介绍BeanUtils.copyProperties方法