上一篇: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的更多相关文章

  1. SpringBoot基础实战系列(一)整合视图

    SpringBoot整合freemarker 1.添加依赖:springboot基本上是无缝衔接,基本上只需要添加对应的依赖,不需要或者做很少量的配置即可 注:对于springboot项目的创建此处不 ...

  2. SpringBoot基础实战系列(三)springboot单文件与多文件上传

    springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...

  3. [CXF REST标准实战系列] 二、Spring4.0 整合 CXF3.0,实现测试接口(转)

    转自:[CXF REST标准实战系列] 二.Spring4.0 整合 CXF3.0,实现测试接口 文章Points: 1.介绍RESTful架构风格 2.Spring配置CXF 3.三层初设计,实现W ...

  4. WCF开发实战系列二:使用IIS发布WCF服务

    WCF开发实战系列二:使用IIS发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS200 ...

  5. Java秒杀系统实战系列~构建SpringBoot多模块项目

    摘要:本篇博文是“Java秒杀系统实战系列文章”的第二篇,主要分享介绍如何采用IDEA,基于SpringBoot+SpringMVC+Mybatis+分布式中间件构建一个多模块的项目,即“秒杀系统”! ...

  6. SQL Server 性能优化实战系列(二)

    SQL Server datetime数据类型设计.优化误区 一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你 ...

  7. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  8. [系列] Go 如何解析 JSON 数据?

    概述 最近掉进需求坑了,刚爬上来,评估排期出现了严重问题,下面三张图很符合当时的心境. 谈需求 估排期 开始干 为啥会这样,我简单总结了下: 与第三方对接. 跨团队对接. 首次用 Go 做项目. 业务 ...

  9. MP实战系列(二)之集成swagger

    其实与spring+springmvc+mybatis集成swagger没什么区别,只是之前写的太不好了,所以这次决定详细写. 提到swagger不得不提rest,rest是一种架构风格,里面有对不同 ...

随机推荐

  1. 详解 HashMap

    本篇博文的知识点,在我们的日常生活中,应用十分广阔.比如:每个学生,都有自己的对应的学号.每一个公民,都有自己的身份证号- - 相信看到这里,有的同学基本上已经猜到了这个类的主要用途.那么,话不多说, ...

  2. git基本设置——git工具篇

    1.设置邮箱和用户名 /*解释: --global 选项代表对 Git 进行全局设置.*/ $ git config --global user.name "Your Name" ...

  3. Des对称可逆加密

    /// <summary> /// DES AES Blowfish ///  对称加密算法的优点是速度快, ///  缺点是密钥管理不方便,要求共享密钥. /// 可逆对称加密  密钥长 ...

  4. .Net Core主机配置

    Host:(主机)负责web应用程序的启用和生成期管理,配置服务器和请求处理管道. 主机配置日志,依赖注入关系,实际上是一个封装了应用资源的对象. 创建主机生成器-〉配置主机-〉创建主机-〉运行主机. ...

  5. 树莓派3b在rt-thread上移植LittlevGL

    树莓派3b在rt-thread上移植LittlevGL 目录 树莓派3b在rt-thread上移植LittlevGL 1.本文概述 2.资源准备 3.上手体验 4.rt-thread与lvgl进行无缝 ...

  6. ES6中不得不说的关键字const

    上一节讲了let关键字,它是用来声明一个变量,只在块级作用域起作用.这一节我们来学习ES6新增的另一个关键字const. const 的作用 const是constant(常量)的缩写,const和 ...

  7. 算法笔记刷题2(codeup 1928)

    又磕了一晚上,多点测试真的很烦 ,完全不知道错哪里,后来发现是我变量名命名不规范导致自己晕了填错了,其实思路还是对的 我觉得书上的做法也还行,但我不太喜欢用二维数组,所以拿以前写的算天数的程序改装了一 ...

  8. Docker数据管理(一)

    数据卷挂载 在生产环境中,需要对数据进行持久化,冗余化,或者在需要在多个容器之间进行数据共享 数据卷:容器内数据直接映射到本地主机环境 数据卷容器:使同特定容器维护数据卷 -v 进行映射 1.在容器内 ...

  9. 如何调试 Inno Setup

    从命令行运行安装包,并加上 /log=filename

  10. [Linux] 检查是否已有进程在运行

    出处:sblim-sfcb-1.4.9 / sfcBroker.c int process_is_running() { #define STRBUF_LEN 512 #define BUF_LEN ...