วันที่จัดรูปแบบเมื่อส่งคืนวันที่ JSON
ขั้นตอนที่ 1: สร้างคลาส CustomObjectMapper
/*** แก้ปัญหาที่เมื่อ SpringMVC ใช้ @ResponseBody เพื่อส่งคืน JSON รูปแบบวันที่จะแสดงเป็นการประทับเวลาตามค่าเริ่มต้น จำเป็นต้องใช้ */ @component ("CustomObjectMapper") คลาสสาธารณะ CustomObjectMapper ขยาย ObjectMapper {Public CustomObjectMapper () {CustomSerializerFactory โรงงาน = ใหม่ CustomSerializerFactory (); Factory.AddGenericMapping (วันที่, คลาส, ใหม่ jSonserializer <date> () {@Override เป็นโมฆะสาธารณะ serialize (ค่าวันที่, jsongenerator jsongenerator, serializerprovider ผู้ให้บริการ) โยน ioexception, jsonprocessingException jsongenerator.writestring (sdf.format (ค่า));}}); this.setserializerfactory (โรงงาน); -ขั้นตอนที่ 2: การกำหนดค่ามีดังนี้:
<MVC: คำอธิบายประกอบ-ไดรฟ์> <MVC: ข้อความคอนเวอร์เตอร์> <bean> <property name = "ObjectMapper" ref = "CustomObjectMapper"> </prevent> </ebean>
ผลกระทบมีดังนี้:
ก่อนการจัดรูปแบบ
หลังจากการจัดรูปแบบ
ขั้นสูง: กลับไปที่วันที่ของรูปแบบที่กำหนดเอง
ส่งคืนรูปแบบวันที่ของสตริง JSON เมื่อใช้ @ResponseBody แอตทริบิวต์ประเภทวันที่ส่งคืนการประทับเวลาประเภทยาวตามค่าเริ่มต้น จะส่งคืนรูปแบบวันที่ที่กำหนดเองได้อย่างไร?
วิธีแก้ปัญหา: ปัจจุบันมีสองวิธีในการใช้งาน
1. การดัดแปลงบางส่วน (ออนไลน์มากขึ้น แต่ไม่แนะนำ);
สืบทอดคลาสบทคัดย่อของแจ็คสัน: JSonserializer <T> จากนั้นเพิ่มคำอธิบายประกอบ @JSonserialize ลงในคุณสมบัติ getter () ของ Javabean
รหัสมีดังนี้:
นำเข้า java.io.ioException; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า org.codehaus.jackson.jsongenerator; นำเข้า org.codehaus.jackson.jsonprocessingException; นำเข้า org.codehaus.jackson.map.jsonserializer; นำเข้า org.codehaus.jackson.map.serializerprovider; / *** @description ส่งคืนแบบกำหนดเวลาการจัดรูปแบบ JSON ที่กำหนดเองในการประมวลผลข้อมูลในตารางข้อมูล*/ คลาสสาธารณะ CustomDateserializer ขยาย JSonserializer <วันที่> {@Override โมฆะสาธารณะต่อเนื่อง (ค่าวันที่, JSongenerator JSongenerator, SerializerProvider SimpledateFormat ("YYYY-MM-DD HH: MM: SS"); jsongenerator.writestring (sdf.format (ค่า)); - วิธีใช้:
@jonserialize (ใช้ = customDateserializer.class) วันที่สาธารณะ getCreatedate () {return creatidate; - 2. การดัดแปลงทั่วโลก (แนะนำอย่างยิ่ง):
MappingjacksonhttpmessageConverter ส่วนใหญ่ใช้ ObjectMapper เพื่อส่งคืนสตริง JSON ที่นี่เราสืบทอดคลาสนี้และลงทะเบียน JSonserializer <T> จากนั้นฉีดวัตถุที่กำหนดเองลงในไฟล์การกำหนดค่า
รหัสมีดังนี้:
นำเข้า java.io.ioException; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า org.codehaus.jackson.jsongenerator; นำเข้า org.codehaus.jackson.jsonprocessingException; นำเข้า org.codehaus.jackson.map.jsonserializer; นำเข้า org.codehaus.jackson.map.objectmapper; นำเข้า org.codehaus.jackson.map.serializerprovider; นำเข้า org.codehaus.jackson.map.ser.customserializerfactory; / *** @description แก้ประเภทวันที่เพื่อส่งคืนรูปแบบ JSON เป็นรูปแบบที่กำหนดเอง*/ คลาสสาธารณะ CustomObjectMapper ขยาย ObjectMapper {Public CustomObjectMapper () {CustomSerializerFactory Factory = New CustomSerializerFactory (); Factory.AddGenericMapping (วันที่, คลาส, ใหม่ jSonserializer <date> () {@Override เป็นโมฆะสาธารณะ serialize (ค่าวันที่, jsongenerator jsongenerator, serializerprovider ผู้ให้บริการ) โยน ioexception, jsonprocessingException jsongenerator.writestring (sdf.format (ค่า));}}); this.setserializerfactory (โรงงาน); -กำหนดค่าใน spring-servlet.xml:
<MVC: คำอธิบายประกอบ-ไดรฟ์> <MVC: ข้อความคอนเวอร์เตอร์> <bean> <property name = "ObjectMapper" ref = "CustomObjectMapper"> </คุณสมบัติ> </ebean>