SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter
上一篇:SpringBoot基础实战系列(一)整合视图
下一篇:SpringBoot基础实战系列(三)springboot单文件与多文件上传
SpringBoot解析Json格式数据
@ResponseBody
注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化
1.创建Controller
注:springboot默认就已经支持返回json格式数据,只需要加上@ResponseBody注解即可
/**
* 通过 @responsebody 注解返回 json 格式数据
* @return
*/
@RequestMapping("/getAll")
@ResponseBody
public List<User> getUsers(){
ArrayList<User> users = new ArrayList<>();
for(int i=0; i < 10 ; i++){
User user = new User();
user.setId(String.valueOf(i));
user.setUsername("shanggushenlong>>>"+i);
user.setAge(i);
user.setBirthday(new Date());
users.add(user);
}
return users;
}
2.创建bean
public class User {
private String id;
private String username;
private Integer age;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", username='" + username + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
3.结果

@RequestBody
注:该注解表示前端发起请求时,要求请求体为 json 格式数据,实质就是反序列化到对应的对象中
1.创建controller
/**
* 前端传入json数据,后端以String字符串接收
* @param userStr
* @return
*/
@RequestMapping("/setUser")
@ResponseBody
public String getUser(@RequestBody String userStr){
System.out.println(userStr);
return userStr.toString();
}
/**
* 前端传入json,后端用 user 对象接收,@RequestBody 能够自动将前端传入的json与bean
* 自动序列化对应成功一个实例对象
* @param user
* @return
*/
@RequestMapping("/setUser2")
@ResponseBody
public String getUser2(@RequestBody User user){
System.out.println(user);
return user.toString();
}
2.结果
- 使用
postman发起请求,需要在body中添加相应的请求体 - 可能出现的问题:
时间格式转换报错------ 解决方法,在bean实体类中对应的birthday字段添加注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")


HttpMessageConverter
springboot对于json默认支持的比较好,但是有时候需要自定义配置,比如上面的时间格式配置,假如你的项目有很多个bean,这个时候每一个bean去添加注解比较麻烦,这个时候就可以使用springboot提供的配置类,自己手动定义配置。
@Configuration
public class WebMvcConfig {
@Bean
MappingJackson2HttpMessageConverter MyHttpMessageConverter(){
// 1.创建一个 Convert
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
// 2. 创建objectmapper
ObjectMapper objectMapper = new ObjectMapper();
// 配置时间格式
objectMapper.setDateFormat(new SimpleDateFormat("yyyy/MM/dd"));
converter.setObjectMapper(objectMapper);
return converter;
}
}
使用创建一个config类,使用
MappingJackson2HttpMessageConverter类,手动添加json相关的配置可能出现的问题:创建配置类,必须在类上添加注解
@Configuration,且在方法上加上@Bean,只有这样配置才会生效。
结果如下:

注:此处可能产生的问题是:配置类写了,没有达到预期的效果,可能是 bean 类中该字段注解没有去掉json格式数据在前后分离的时代,是非常重要的一种数据格式,因此HttpMessageConverter也变的很重要,我们可以在此相关类中配置相应的规则springboot提供的相关配置类JacksonHttpMessageConvertersConfiguration MappingJackson2HttpMessageConverter
希望自己能一直保持初衷,文章一直写下去,和大家一起成长
本系列代码github地址:https://github.com/shanggushenlong/springboot-demo
SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter的更多相关文章
- SpringBoot基础实战系列(一)整合视图
SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ...
- SpringBoot基础实战系列(三)springboot单文件与多文件上传
springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...
- [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口(转)
转自:[CXF REST标准实战系列] 二.Spring4.0 整合 CXF3.0,实现测试接口 文章Points: 1.介绍RESTful架构风格 2.Spring配置CXF 3.三层初设计,实现W ...
- WCF开发实战系列二:使用IIS发布WCF服务
WCF开发实战系列二:使用IIS发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS200 ...
- Java秒杀系统实战系列~构建SpringBoot多模块项目
摘要:本篇博文是“Java秒杀系统实战系列文章”的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项目,即“秒杀系统”! ...
- SQL Server 性能优化实战系列(二)
SQL Server datetime数据类型设计.优化误区 一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你 ...
- ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解
前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...
- [系列] Go 如何解析 JSON 数据?
概述 最近掉进需求坑了,刚爬上来,评估排期出现了严重问题,下面三张图很符合当时的心境. 谈需求 估排期 开始干 为啥会这样,我简单总结了下: 与第三方对接. 跨团队对接. 首次用 Go 做项目. 业务 ...
- MP实战系列(二)之集成swagger
其实与spring+springmvc+mybatis集成swagger没什么区别,只是之前写的太不好了,所以这次决定详细写. 提到swagger不得不提rest,rest是一种架构风格,里面有对不同 ...
随机推荐
- [Java网络安全系列面试题] GET 和 POST 的区别在哪里?
一. 概述 本文的内容源自其他博客的总结,属于笔者的读书笔记,结构如下: HTTP 的请求报文 GET 方法的特点 POST 方法的特点 GET 和 POST 的区别 二. HTTP 的请求报文 首先 ...
- kubernetes的headless service介绍
headless service是一个特殊的ClusterIP类service,这种service创建时不指定clusterIP(--cluster-ip=None),因为这点,kube-proxy不 ...
- angularjs: draggable js
var startX = 0, startY = 0, x = 0, y = 0, minDragRang = 50; var targetContainer = angular.element(do ...
- 谷歌提高Google Assistant中Voice Match的准确性
谷歌正在提高 Google Assistant 中 Voice Match 的准确性,使其变得更加完善.谷歌表示一旦用户在 Google Assistant 中启用 Voice Match 功能,那么 ...
- Django入门2:路由系统
1.单一路由对应 url(r'^index/', views.index), # FBV url(r'^home/', views.Home.as_view()), # CBV 2.基于正则的路由 u ...
- UVA10599:Robots(II)(最长上升子序列)
Your company provides robots that can be used to pick up litter from fields after sporting events an ...
- oracle查询当前系统时间前10天的数据
select * from eo_c_order t where t.create_time>systimestamp-interval'1'day; 转载于:https://www.cnblo ...
- Android 项目 Android 学习手册(一)
前言: 当每次查询android 知识的时候,内心是凌乱的,总觉得要是有一个工具多好, 尤其在手机端如何可以查询的话,会非常完美,能大大减少选择查询的时间, 之前见了很多java 学习手册,把一些重要 ...
- 流畅的python读书笔记-第十章-继承优缺点
继承的优缺点 推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架.--Alan Kay 子类化内置类型很麻烦 (如 list 或 dict)) ,别搞这种 直接子类化内置类型(如 dict.li ...
- CF--思维练习-- CodeForces - 215C - Crosses(思维题)
ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...