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

简介:

js处理

请求格式:

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

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
}
AI 代码解读

日期格式化

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

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
AI 代码解读

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

支持多种日期格式

解决方案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;
 }
}
AI 代码解读

解决方案2

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

 @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
 private Date deadline;
AI 代码解读

其他

附一个自己写的比较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;
};
AI 代码解读

 

目录
打赏
0
0
0
0
891
分享
相关文章
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
88 4
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
90 8
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
931 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
5月前
|
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
这篇文章讨论了在Spring Boot 3.2.1版本中,同名同类型的bean和@Service注解类之间冲突的问题得到了解决,之前版本中同名bean会相互覆盖,但不会在启动时报错,而在配置文件中设置`spring.main.allow-bean-definition-overriding=true`可以解决这个问题。
187 0
Springboot3.2.1搞定了类Service和bean注解同名同类型问题修复
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
92 0
|
5月前
|
强大!基于Spring Boot 3.3 六种策略识别上传文件类型
【10月更文挑战第1天】在Web开发中,文件上传是一个常见的功能需求。然而,如何确保上传的文件类型符合预期,防止恶意文件入侵,是开发者必须面对的挑战。本文将围绕“基于Spring Boot 3.3 六种策略识别上传文件类型”这一主题,分享一些工作学习中的技术干货,帮助大家提升文件上传的安全性和效率。
203 0
Go json 能否解码到一个 interface 类型的值
Go json 能否解码到一个 interface 类型的值
53 1
|
7月前
|
解码Spring Boot与JSON的完美融合:提升你的Web开发效率,实战技巧大公开!
【8月更文挑战第29天】Spring Boot作为Java开发的轻量级框架,通过`jackson`库提供了强大的JSON处理功能,简化了Web服务和数据交互的实现。本文通过代码示例介绍如何在Spring Boot中进行JSON序列化和反序列化操作,并展示了处理复杂JSON数据及创建RESTful API的方法,帮助开发者提高效率和应用性能。
290 0
|
7月前
|
Jackson:SpringBoot中的JSON王者,优雅掌控数据之道
【8月更文挑战第29天】在Java的广阔生态中,SpringBoot以其“约定优于配置”的理念,极大地简化了企业级应用的开发流程。而在SpringBoot处理HTTP请求与响应的过程中,JSON数据的序列化和反序列化是不可或缺的一环。在众多JSON处理库中,Jackson凭借其高效、灵活和强大的特性,成为了SpringBoot中处理JSON数据的首选。今天,就让我们一起深入探讨Jackson如何在SpringBoot中优雅地控制JSON数据。
235 0
Spring Boot返回Json数据及数据封装
本文详细介绍了如何在Spring Boot项目中处理JSON数据的传输 Spring Boot默认使用Jackson作为JSON处理器,并通过`spring-boot-starter-web`依赖自动包含相关组件。文章还展示了如何配置Jackson处理null值,使其转换为空字符串。此外,文章比较了Jackson和FastJson的特点,并提供了FastJson的配置示例,展示了如何处理null值以适应不同应用场景。