三月份已经来临,2019年年底所定的计划和目标是否已经提上日程了呢?在以往,3月份初即已经开启“金三银四”就业季了!而今年,小课算了算日子,如果3月份全国能够解除疫情,那么3月份复工,大多企业肯定需要一定的时间来调整业务,那么差不多到4月份开始招聘,你作为求职者4月份如果能面试上,也有三个月的试用期,那就差不多8月份才可以转正,到那个阶段,2020年都已经过完一大半了。更何况,这还是最好的情形。

而最坏的结果则是,疫情过后,企业需要活下去,就会缩减成本,缩减的首要就是裁员。即便有招聘的需求,在狼多肉少的现状下,应聘者也需要有足够的竞争力和优势才能够胜出。也正是因为如此,为了能够更好的应对疫情过后的招聘市场,我们增设了《峰哥说技术》专栏,真技术,纯干货,行业大咖执笔讲解,系统讲解技术文章,为自己,也为美好的明天!

今日份主题

Spring Boot返回JSON

JSON是目前主流的前后端数据传输方式,但是很多小伙伴在这种开放模式下,对于JSON的使用不是很熟练。私下有人问我,今天峰哥抽空专门写了篇文章来聊聊这个问题。

峰哥今天带着大家分别采用jackson-databind、gson、fastjson作为JSON的处理器带着大家来学习一下。

大家都知道,Spring MVC使用消息转换器HttpMessageConverter对json的转换提供了很好的支持。其实在Spring boot对于JSON的处理提供了进一步提供了简化,只要添加web依赖后,由于web依赖中默认添加了jackson-databind作为JSON处理器,因此我们不需要再做更多的处理。下面看案例,做一个具体的说明。

A.jackson-databind默认实现

1.创建项目,添加web支持:

<dependency>

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.创建实体类Book

public class Book {
private Integer id;
private String name;
private String author;
@JsonFormat(pattern = "yyyy-MM-dd") //日期字段格式化
private Date pubTime;
@JsonIgnore //忽略转换字段
public Double price;
public Book() {
}
public Book(Integer id, String name, String author, Date pubTime, Double price) {
this.id = id;
this.name = name;
this.author = author;
this.pubTime = pubTime;
this.price = price;
}

//getter和setter省略...

}

3.填写IndexController

@Controller

public class IndexController {

@GetMapping("/book")

@ResponseBody

public Book getBook(){

return new Book(1,"三国演义","罗贯中",new Date(),67.6D);

}

}

4.在浏览器输入:http://localhost:8080/book,中进行测试,结果如下:

B.自定义类型转换器gson实现

由于Spring Boot中默认提供了:

GsonHttpMessageConvertersConfiguration自动化配置,可以直接使用Gson,但是如果待转换的数据中包含日期格式,那么我们需要GsonHttpMessageConverter即可。代码如下:

1.在pom.xml中排除默认的jackson-databind支持。同时添加gson依赖。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>jackson-databind</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>

2.编写MyJsonConfig配置类,在该类中注入GsonHttpMessageConverter对象。

@Configuration

public class JsonConfig {

@Bean

public GsonHttpMessageConverter gsonHttpMessageConverter(){

GsonHttpMessageConverter converter = new GsonHttpMessageConverter();

GsonBuilder gsonBuilder=new GsonBuilder();

gsonBuilder.setDateFormat("yyyy-MM-dd");

//对于转换对象中的protected字段给排除转换

//gsonBuilder.excludeFieldsWithModifiers(Modifier.PROTECTED);

Gson gson = gsonBuilder.create();

converter.setGson(gson);

return converter;

}

}

3.修改Book实体类,去掉相关注解。

public class Book {
private Integer id;
private String name;
private String author;
private Date pubTime;
public Double price;
//构造方法和getter和setter省略...

}

4.在浏览器中进行测试。

对于Java配置类的使用,大家经过几个练习后,应该也没有什么问题。大家多练习。

C.自定义类型转换器fastjson实现

fastjson是阿里巴巴的一个开源JSON解析框架,是目前JSON解析速度最快的开源框架,该框架也可以被集成到Spring Boot中。不同于gson,fastjson集成完后不能马上使用,需要提供HttpMessageConverter后才能使用。使用的步骤如下:

1.在pom.xml中移除jackson-databind依赖,添加fastjson依赖。

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<exclusions>

<exclusion>

<artifactId>jackson-databind</artifactId>

<groupId>com.fasterxml.jackson.core</groupId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.47</version>

</dependency>

2.编写配置类MyFastJsonConfig

@Configuration

public class MyFastJsonConfig {

@Bean

public FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){

FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();

FastJsonConfig config=new FastJsonConfig();

config.setDateFormat("yyyy-MM-dd");

config.setCharset(Charset.forName("UTF-8"));

config.setSerializerFeatures(

//是否输出类名

//SerializerFeature.WriteClassName,

//是否输出value为null的数据

SerializerFeature.WriteMapNullValue,

//是否生成JSON的格式化

SerializerFeature.PrettyFormat,

//是否输出空的List集合

SerializerFeature.WriteNullListAsEmpty,

//是否输出null字符串

SerializerFeature.WriteNullStringAsEmpty

);

converter.setFastJsonConfig(config);

return converter;

}

}

3.在application.properties中配置响应编码。否则会有中文乱码。

spring.http.encoding.force-response=true

4.在浏览器中输入http://localhost:8080/book,进行测试,结果如下。

返回结果乱码_峰哥说技术系列-7 Spring Boot返回JSON相关推荐

  1. vueform表单文件上传_峰哥说技术系列-8.Spring Boot文件上传(Form表单和Ajax方式)

    今日份主题 Spring Boot文件上传(Form表单和Ajax方式) 在Spring Boot中,和文件上传的主要和MultipartResolver接口有关,他有两个实现类 StandardSe ...

  2. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA

    今日份主题 Spring Boot 整合 Spring Data JPA JPA(Java Persistence API)是用于对象持久化的 API,是Java EE 5.0 平台标准的 ORM 规 ...

  3. Spring Boot 返回 XML 数据,一分钟搞定!

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击 ...

  4. 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸!

    点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 什么是面霸?就是在面试中,神挡杀神佛挡杀佛,见招拆招,面到面试官自惭形秽 ...

  5. Spring Boot返回中文变成问号,全局异常中文返回问号

    在 Spring Boot 返回中文全部都变成了乱码,起初试过在 yml 配置文件添加字符格式限制,不起作用,然后我配置的拦截器,也是不起作用. 后面发现,我在 controller 写的接口返回中文 ...

  6. BCrypt加密怎么存入数据库_松哥手把手带你入门 Spring Security,别再问密码怎么解密了...

    因为之前有小伙伴在松哥群里讨论如何给微人事的密码解密,我看到聊天记录后就惊呆了. 无论如何我也得写一篇文章,带大家入门 Spring Security!当我们在一个项目中引入 Spring Secur ...

  7. 从零开始学springboot笔记(二)-Spring boot返回json数据(中文无乱码)

    先创建json实体类,如下: public class Demo {private int age; private String address; private String name; priv ...

  8. 无返回值_只需一步,在Spring Boot中统一Restful API返回值格式与处理异常

    统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: public cl ...

  9. 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸

    什么是面霸?就是在面试中,神挡杀神佛挡杀佛,见招拆招,面到面试官自惭形秽自叹不如!松哥希望本文能成为你面霸路上的垫脚石! 做 Java 开发,没有人敢小觑 Spring Boot 的重要性,现在出去面 ...

  10. phython在file同时写入两个_喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

最新文章

  1. CSP 202006-2 稀疏向量 python实现(非满分)(待更新)
  2. LeetCode-剑指 Offer 15. 二进制中1的个数
  3. 史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......
  4. java项目processes设置,Jvm调优和SpringBoot项目优化的详细教程
  5. 论文浅尝 | 异构图 Transformer
  6. IBATIS的优缺点
  7. java解决跨域 多个号_java-解决跨域问题
  8. 无论PC还是Mac,都能畅快地使用移动硬盘
  9. 为什么普通红包自己不能领_为什么行驶证和驾驶证不能放在车上?别给自己找麻烦...
  10. volte的sip信令流程_VOLTE-SIP完整信令解析
  11. v-distpicker
  12. 编写java程序计算梯形面积_学习练习 java面向对象梯形面积
  13. 队列的图文介绍及C/C++的实现实例(转自http://www.cnblogs.com/skywang12345/p/3562279.html)
  14. win10系统的qq无网络连接网络连接到服务器,Win10能上qq打不开网页_Win10能上qq不能上网怎么办?-192路由网...
  15. ActiveMQ的MQTT:WARN | Stealing link for clientId XXX From Connection Transport
  16. 极坐标形式的复数计算器
  17. 使用Arduino开发ESP32(06):Ethernet的使用(基于LAN8720)
  18. 天兔lepus部署文档
  19. 计算机房间的英语,酒店客房状态常用英语
  20. IFRS 9减值损失

热门文章

  1. HttpRequest类
  2. [报告]HDU 4343 Interval query
  3. 书------编程书(FoxPro)
  4. 1001 Hello,World!
  5. element ui的table组件在鼠标滑动时边框线消失的解决
  6. html代码表白_七夕表白代码,樱花特效+爱心特效+花瓣+评论留言功能等
  7. 不存在_别傻了,根本就不存在缘分天定
  8. java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup
  9. python深浅复制_python3 深浅拷贝(复制)
  10. php7使用什么缓存,PHP7 opcache缓存清理问题