SrpingMVC通过JSON注入from数据到实体自定义(LocalDateTime,LocalDate,Boolean类型)字段的序列化、反序列化方法

时间:2021-02-09 01:00:16
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import java.io.IOException; @Component
public class JsonBooleanDeserializer extends JsonDeserializer<Boolean> { /***
* 兼容sql92 bit数据类型 0(false) 1(true)
* @param parser
* @param ctxt
* @return
* @throws IOException
* @throws JsonProcessingException
*/
@Override
public Boolean deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String value = parser.getText();
if(StringUtils.isBlank(value))
{
return null;
} //here we treat 1 as true, 0 false
if(Boolean.valueOf(StringUtils.equals("1",value)))
{
return Boolean.TRUE;
}
if(Boolean.valueOf(StringUtils.equals("on",value))) //for checkbox component
{
return Boolean.TRUE;
} if(Boolean.valueOf(StringUtils.equals("0",value)))
{
return Boolean.FALSE;
} if(Boolean.valueOf(StringUtils.equalsIgnoreCase("true",value)))
{
return Boolean.TRUE;
} if(Boolean.valueOf(StringUtils.equalsIgnoreCase("false",value)))
{
return Boolean.FALSE;
} throw new RuntimeException("unsupported conversion from ["+value+"] to Boolean.");
}
}

实现目的:

将 数据库 bit类型的0,1分别转换成Boolean类型的False和true

将短日期格式2019-01-01转换成LocalDate类的实例

将日期时间格式的数据2019-01-01 10:10:10转换成LocalDateTime的实例

前端数据

<input type="radio" name="f_scjafs" value="1">接受
<input type="radio" name="f_scjafs" checked="" value="0">取消 <input style="width:299px;" id="f_wxdkhqzrq" name="f_wxdkhqzrq" type="text" class="input" onfocus="WdatePicker({isShowToday:true,dateFmt:'yyyy-MM-dd',readOnly:true})" value="2019-05-07">
<input autocomplete="off" name="f_sqsj" id="f_sqsj" type="text" maxlength="100" onfocus="WdatePicker({isShowToday:true,dateFmt:'yyyy-MM-dd HH:mm:ss',readOnly:true})" value="2019-05-29 16:35:14" class="input1">

后端结果

SrpingMVC通过JSON注入from数据到实体自定义(LocalDateTime,LocalDate,Boolean类型)字段的序列化、反序列化方法

前端代码

<script type="text/javascript" src="${ctx}/js/jquery.serializejson.min.js"></script>
<script>
var data = {};
data = $("#form1").serializeJSON();
var issueProcess = []; $("#sjcljl .list").each(function(index,item) {
var step = index+1;
var record ={};
record.id = replaceNull($(item).find('input[id="issueProcessId'+step+'"]').val());
record.f_clsm = replaceNull($(item).find('textarea[id="f_clsm'+step+'"]').val());
record.f_fk = replaceNull($(item).find('select[id="f_fk'+step+'"]').val());
record.f_clkssj = replaceNull($(item).find('input[id="f_clkssj'+step+'"]').val());
record.f_cljssj = replaceNull($(item).find('input[id="f_cljssj'+step+'"]').val());
record.f_clryid = replaceNull($(item).find('input[id="f_clry1'+step+'"]').attr("f_clryid1"+step)); //至少填写开始、结束时间
if(!(isNull(record.f_clkssj)|| isNull(record.f_cljssj) ||isNull(record.f_clryid))) {
issueProcess.push(record);
}
}); data.issueProcess = issueProcess; $.ajax({
type: "POST",
url: "/itss/issue/save",
dataType: 'json',
contentType : 'application/json;charset=utf-8',
data: JSON.stringify(data),
success: function (resp) {
//处理代码
}, error: function (err) {
layer.alert(err.responseText, {
offset: '200px',
});
}
}); function replaceNull(val){
if(val==undefined || val==null || val=="" || val=='' || val=='null' || val=='-1' ||val.length<parseInt(1)){
return null;
}else{
return val;
}
}
</script>

后端代码

    /***
* 问题保存
* @param model
* @return
*/
@RequestMapping(value = "/save", method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ReturnParam save(@RequestBody UserIssueDto model) { ReturnParam rp = new ReturnParam(); Integer id = model.getId(); if (id>0) { ///.... } else { ///....
} return rp;
} public class ReturnParam { private Object result; private String desc; private String status; private String wybs; public String getWybs() {
return wybs;
} public void setWybs(String wybs) {
this.wybs = wybs;
} public Object getResult() {
return result;
} public void setResult(Object result) {
this.result = result;
} public String getDesc() {
return desc;
} public void setDesc(String desc) {
this.desc = desc;
} public String getStatus() {
return status;
} public void setStatus(String status) {
this.status = status;
} } public class UserIssueDto implements Serializable
{
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using= JsonLocalDateTimeSerializer.class)
@JsonDeserialize(using= JsonLocalDateTimeDeserializer.class)
private LocalDateTime f_sqsj; //申请时间 @JsonSerialize(using= JsonBooleanSerializer.class)
@JsonDeserialize(using= JsonBooleanDeserializer.class)
private Boolean f_scjafs; //审查结案方式:0拒绝 1接受 @DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonSerialize(using= JsonLocalDateSerializer.class)
@JsonDeserialize(using= JsonLocalDateDeserializer.class)
private LocalDate f_wxdkhqzrq;// 维修单客户签字日期 //... }
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.stereotype.Component; import java.io.IOException; @Component
public class JsonBooleanSerializer extends JsonSerializer<Boolean> { @Override
public void serialize(Boolean value, JsonGenerator gen, SerializerProvider serializers) throws IOException{ if(null == value)
{
gen.writeString((String)null);
}
gen.writeBoolean(Boolean.TRUE.equals(value));
}
}
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import java.io.IOException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; /***
* 兼容jsr310的LocalDate JSON反序列化类
*/
@Component
public class JsonLocalDateDeserializer extends JsonDeserializer<LocalDate> { @Override
public LocalDate deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException{
String szLocalDate = parser.getText();
if(StringUtils.isBlank(szLocalDate)) {
System.err.println("invalid date supplied for conversion,ignored.");
return null;
}
return LocalDate.parse(parser.getText(), DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.of("GMT+8")));
}
}
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.stereotype.Component; import java.io.IOException;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; /***
* 兼容jsr310的LocalDate JSON序列化类
*/
@Component
public class JsonLocalDateSerializer extends JsonSerializer<LocalDate> { @Override
public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException{ if(value == null)
{
System.err.println("invalid date supplied for conversion,ignored.");
return;
}
String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.of("GMT+8")).format(value);
gen.writeString(formattedDate);
}
}
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component; import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; /***
* 兼容jsr310的LocalDateTime JSON反序列化类
*/
@Component
public class JsonLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override
public LocalDateTime deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException{ String szLocalDateTime = parser.getText(); if(StringUtils.isBlank(szLocalDateTime)) {
System.err.println("invalid date supplied for conversion,ignored.");
return null;
}
return LocalDateTime.parse(parser.getText(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("GMT+8")));
}
}
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.stereotype.Component; import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; /***
* 兼容jsr310的LocalDateTime JSON序列化类
*/
@Component
public class JsonLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException{ if(value ==null)
{
System.err.println("invalid date supplied for conversion,ignored.");
return;
}
String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("GMT+8")).format(value);
gen.writeString(formattedDate);
}
}

相关依赖及版本:

commons-lang3-3.3.2.jar

fastjson-1.2.12.jar

jackson-datatype-jsr310-2.9.8.jar

spring 4.2.7

实际数据转换效果

SrpingMVC通过JSON注入from数据到实体自定义(LocalDateTime,LocalDate,Boolean类型)字段的序列化、反序列化方法的更多相关文章

  1. &commat;NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法

    JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...

  2. DataTable 数据导入MS ACCESS 数据库中 数字类型字段为空的解决办法

    string strSql = "insert into GongCheng (GCSY,GCBH,GCBHOLD,GCMC,GCKCJD,GCJSDW,GCSJDW,GCKCDW,GCSG ...

  3. json格式的数据及遍历:

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  4. python 使用eval&lpar;&rpar; 可以将json格式的数据&comma;转换为原始数据

    使用python 自带的函数可以将json 格式的数据(也就是字符串)转换为原始格式的数据, 当使用json.loads()无法将json格式的数据转换为原始数据(存在多层各种格式类型数据的嵌套), ...

  5. android开发学习 ------- json数据与实体类之间的相互转换

    在网络请求的时候,会返回给我们实体类,我们需要将实体类转化为json字符串,方便处理数据: 有时候也会将json数据转换为实体类. 在Android Studio中,json要互相转换,需要用到gso ...

  6. c&num;实例化继承类,必须对被继承类的程序集做引用 &period;net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3&period;6笔记 你大波哥~ C&num;开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具

    c#实例化继承类,必须对被继承类的程序集做引用   0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...

  7. MVC学习系列6--使用Ajax加载分部视图和Json格式的数据

    Ajax的应用在平时的工作中,很是常见,这篇文章,完全是为了,巩固复习. 我们先看看不使用json格式返回分部视图: 先说需求吧: 我有两个实体,一个是出版商[Publisher],一个是书[Book ...

  8. &period;NET Core配置文件加载与DI注入配置数据

    .NET Core配置文件 在以前.NET中配置文件都是以App.config / Web.config等XML格式的配置文件,而.NET Core中建议使用以JSON为格式的配置文件,因为使用起来更 ...

  9. Android中解析JSON形式的数据

    1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式, ...

随机推荐

  1. 一个看似很简单的SQL却难倒了很多人

    一个选课表,有学生id,课程id,老师id,要求选出同时选了语文和数学的学生 USE [tempschool] GO /****** 对象: Table [dbo].[SelectC] 脚本日期: 0 ...

  2. emc 郵件設置

    1. 進入Data Domain管理界面后,在Administration--->Settings界面.點擊More mail Server--->Set Mail Server---&g ...

  3. javascript 函数 方法

    函数 1.函数的定义 (1)function 函数名(x){ 函数执行体; } (2)var 函数名=function(x){ 函数执行体; }; 这种方法说明,在javascript中,函数就是一种 ...

  4. JavaScript 中的闭包和作用域链(读书笔记)

    要想理解闭包,应当先理解JavaScript的作用域和作用域链. JavaScript有一个特性被称之为“声明提前(hoisting)”,即JavaScript函数里声明的所有变量(但不涉及赋值)都被 ...

  5. idea创建Maven多模块项目

    最近几天学习到了创建多模块项目,应为自己使用的是Idea,所以想用idea创建多模块,查阅了相关资料后,自己做一个记录. 一.首先创建一个maven项目 Parent Project,创建xxx-ro ...

  6. 解决docker镜像pull超时问题

    第一步:通过dig @114.114.114.114 registry-1.docker.io找到可用IP dig @114.114.114.114 registry-1.docker.io 第二步: ...

  7. idea 开发javaee 时,出现访问的文件和源文件不一样,没有正常更新的解决方案

    这是因为我配置的idea debug 运行模式 输出的文件在 out 和 target 目录下,因为idea本身的原因,导致这两个目录没有及时更新, 导致前端在访问时的页面源码和ide中的一直不一样, ...

  8. Python中的变量引用对象需注意的几点

    Python中的变量引用对象需注意的几点 分类:Python (55)  (0) 普通引用: Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须 ...

  9. Linux环境下用Weblogic发布项目【一】 -- 安装Weblogic

     一.Weblogic安装系统环境: 1.前提条件: a.在笔记本[Windows7]上安装远程连接Linux软件:F-Secure SSH File Transfer Trial[简写为:FSSH] ...

  10. 当你用element-ui遇到需要在el-table-column上v-for时,这篇文章你能用的上,也就是你需要二级循环

    好链接就要丢过去 https://blog.csdn.net/qq_28929589/article/details/79445354