SpringBoot中接收json数据及转换日期类型

简介:

js处理

请求格式:

$.ajax({
 type: "POST",
 url: "xxx",
 dataType: 'json',//必须指定
 contentType: 'application/json',//必须指定
 data: JSON.stringify(inquiryData),//如json对象为标准的json对象则此处可以直接使用否则需先转换为json字符串
 success: function(data){
  .....
 }
});

Controller处理

//接受一个简单的javabean
 /**
  * 对应前端data格式
  * {
  *  javabean:{
  *   pro1:'value'
  *   ,pro2:'value'
  *   ,.....
  *  }
  * }
  */
 @RequestMapping(value = "xxx")
 public ResponseEntity<JavaBean> generateInquirySheet(@RequestBody JavaBean javabean) {
    .....
  return ResponseEntity.ok(javabean);
 }

//接受一个复杂的javabean对象,其中包含List,javabean
 /**
  * 对应前端data格式
  * {
  * javaBean1:{
  * pro1:'value'
  * ,pro2:'value'
  * }
  * ,javaBean2s:[
  * {
  * pro1:'value'
  * ,pro2:'value'
  * }
  * ,{
  * pro1:'value'
  * ,pro2:'value'
  * }
  * ]
  * ,.....
  * }
  */
 @RequestMapping(value = "xxx")
 public ResponseEntity<JavaBean> generateInquirySheet(@RequestBody JsonParam  jsonParam) {
    .....
  return ResponseEntity.ok(javabean);
 }
//在controller内申明一个内部类用于接收前端传递的参数
//注意:属性名称需与前端传入的json对象中属性名一致
class JsonParam {
 private JavaBean1 javaBean1;
 private List<JavaBean2> javaBean2s;
//get,set
}

日期格式化

springboot中默认接收的日期自动转换不支持yyyy-MM-dd HH:mm:ss格式,可以通过在application.properties中指定

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

来支持此格式,但是指定之后所有前端传递的日期都必须为此格式才能正常转换,否则会抛出异常

支持多种日期格式

解决方案1

手动实现一个日期类型转换的转换类,并注册到springboot中

@JsonComponent
public class JsonDateDeserializer extends JsonDeserializer<Date> {
 private String[] patterns = {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"};

 @Override
 public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
  String dateAsString = jsonParser.getText();
  Date parseDate = null;
  try {
   parseDate = DateUtils.parseDate(dateAsString, patterns);
  } catch (ParseException e) {
   throw new IllegalArgumentException(e.getCause());
  }

  return parseDate;
 }
}

解决方案2

在需转换的javabean日期属性上增加JsonFormat并指定格式,
注意:application.properties中指定spring.jackson.date-format后JsonFormat注解会失效

 @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
 private Date deadline;

其他

附一个自己写的比较low的表单转换json的工具方法

/*
* 将指定element下所有表单元素依据前缀后缀的模式生成json对象
* 分隔符 "." 表示 对象  如 aaa.xxx
* 分隔符 "[]" 表示 数组  如 aaa[]xxx
* 注:. laytable 中固定右侧css为 layui-table-fixed-r,
* laytable固定会在页面形成2层标签,所以直接取会存在重复值
* */
$.fn.exSerializeByPrefix=function(){
 var $form,formAsArray,name,names,prefix,suffix,value,serializeObj,arrObj,arrObjNow,arrObjLen,objMak,arrMark;
 objMak = '.';
 arrMark ='[]';
 serializeObj = {};
 $form = this;
 formAsArray = $form.find("input, select, textarea").serializeArray();
 $.each(formAsArray, function (i, obj) {
  name = obj.name;
  value = obj.value;
  if(name.indexOf(objMak)!=-1){
   names =name.split(objMak);
   prefix = names[0];
   suffix = names[1];

   arrObjNow = serializeObj[prefix];
   if( arrObjNow == null ){
    arrObjNow = {};
    arrObjNow[suffix] = value;
    serializeObj[prefix] = arrObjNow;
    return true;
   }
   serializeObj[prefix][suffix] = value;
  }else if(name.indexOf(arrMark)!=-1){
   names =name.split(arrMark);
   prefix = names[0];
   suffix = names[1];
   arrObj = serializeObj[prefix];
   if( arrObj == null ){
    arrObj = [];
    arrObjNow = {};
    arrObjNow[suffix] = value;
    arrObj.push(arrObjNow);
    serializeObj[prefix] = arrObj;
    return true;
   }
   arrObjLen = arrObj.length;
   arrObjNow = arrObj[arrObjLen-1];
   if(arrObjNow[suffix] == null){
    arrObjNow[suffix] = value;
   }else{
    arrObjNow = {};
    arrObjNow[suffix] = value;
    arrObj.push(arrObjNow);
   }
  }else{
   serializeObj = {"message":"仅支持文本框中包含'.'和包含'[]'的名称进行序列化,不包含则无法转换"}
  }
 });
 return serializeObj;
};

 

目录
相关文章
|
1月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
56 9
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
1月前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
1月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
NoSQL Java 数据库连接
Idea创建SpringBoot多模块项目
我们可以定义一个维度,以此来划分模块,例如上述商城、可以划分成商品、库存和订单模块。也可以目录结构分层,`Controller`层,只不过没人这样做。这样就引申出了下一个问题`拆分策略`。
934 0
Idea创建SpringBoot多模块项目
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
503 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
155 0
创建springboot项目的基本流程——以宠物类别为例
|
存储 机器学习/深度学习 IDE
SpringBoot 项目与被开发快速迁移|学习笔记
快速学习 SpringBoot 项目与被开发快速迁移
SpringBoot 项目与被开发快速迁移|学习笔记
|
Java Spring
自定义SpringBoot项目的启动Banner
``Banner``是``SpringBoot``框架一个特色的部分,其设计的目的无非就是一个框架的标识,其中包含了版本号、框架名称等内容,既然``SpringBoot``为我们提供了这个模块,它肯定也是可以更换的这也是``Spring``开源框架的设计理念。