SrpingMVC經過JSON注入from數據到實體自定義(LocalDateTime,LocalDate,Boolean類型)字段的序列化、反序列化方法

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."); } }

 

實現目的:javascript

將 數據庫 bit類型的0,1分別轉換成Boolean類型的False和true前端

將短日期格式2019-01-01轉換成LocalDate類的實例java

將日期時間格式的數據2019-01-01 10:10:10轉換成LocalDateTime的實例jquery

前端數據ajax

<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">

後端結果spring

 

 

前端代碼sql

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

相關依賴及版本:apache

commons-lang3-3.3.2.jarjson

fastjson-1.2.12.jar

jackson-datatype-jsr310-2.9.8.jar

spring 4.2.7

 

實際數據轉換效果

相關文章
相關標籤/搜索