SpringBoot中接收json数据及转换日期类型-阿里云开发者社区

开发者社区> meijm0103> 正文

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;
};

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot2 整合JTA组件,多数据源事务管理
JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。
447 0
为什么Spring MVC能自动转换json/xml,你研究过它背后的原理吗?
SpringMVC是目前主流的Web MVC框架之一。本文使用的demo基于maven,是根据入门blog的例子继续写下去的。
768 0
SpringBoot2 配置多数据源,整合MybatisPlus增强插件
本文源码:GitHub·点这里 || GitEE·点这里 一、项目案例简介 1、多数据简介 实际的项目中,经常会用到不同的数据库以满足项目的实际需求。随着业务的并发量的不断增加,一个项目使用多个数据库:主从复制、读写分离、分布式数据库等方式,越来越常见。
2532 0
Spring MVC 之类型转换(五)
虽然SpringMVC可以自动绑定多种数据类型,但是有时候有些特殊的数据类型还是会在绑定时发生错误,需要我们自己书写类型转换完成绑定。 SpringMVC中提供两种绑定方式:以时间转换为例。 1、属性编辑器(传统方式) 控制器: 1 @RequestMapping(value="/login.
901 0
SpringBoot实战(四)之使用JDBC和Spring访问数据库
这里演示的是h2databse示例,所以简单的介绍普及下h2database相关知识 H2数据库是一个开源的关系型数据库。 H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容。
2229 0
+关注
meijm0103
知其然,知其所以然
55
文章
5
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载