Pemandangan
Tim kami sekarang menghadapi masalah docking antarmuka data multi-terminal. Untuk menyelesaikan masalah ini, kami telah menentukan spesifikasi untuk docking antarmuka.
Front-end (Android, iOS, Web Front-end) dan back-end membahas spesifikasi format data dan menentukan format data JSON:
{"kode": "200", "data": {"": ""}, "pesan": "diproses dengan sukses"} {"kode": "300", "data": {"": ""}, "pesan": "tidak ada pengguna ini"}Kode ini mewakili status pemrosesan permintaan: 200 adalah pemrosesan normal, 300 adalah pemrosesan pengecualian bisnis, dan 500 adalah pemrosesan pengecualian sistem.
Data mewakili data yang dikembalikan oleh latar belakang.
Prompt latar belakang pesan akan mengembalikan alasan kesalahan saat normal atau berhasil.
Masalahnya ada di sini
Bukankah akan sangat merepotkan untuk membiarkan semua orang membungkus nilai pengembalian setiap tampilan JSON?
Pada saat ini, AOP akan diluncurkan. Kita dapat menggunakan ide AOP untuk membungkusnya pada lapisan ketika permintaan kembali ke JSON sebelum ditanggapi klien.
Langkah Implementasi
Aktifkan AOP
<!-Paket dasar Jika banyak, terpisah dengan ","-> <konteks: komponen-scan-package = "com.we, cn.isuyang"> <konteks: termasuk filter type = "annotation" expression = "org.springframework.stereotype.service" /> <konteks: pengecualian filter = "annotation.stereotype.service" /> <Context: Excude-filter type = "annotation.stereotype.service" /> <Context: Excude-Filter Type = "Annotation.Stereotype.Service" /<Context: Excude-filter type = "annotation" annotation " Expression = "org.springframework.stereotype.controller" /> </context: component-scan> <!-buka anotasi AOP-> <aop: aspekj-autoproxy />
Buat bagian
/*** JSON Mengembalikan wajah singgung* <p>* Digunakan untuk memproses JSON Mengembalikan hasilnya** @author zhuangjunxiang ([email protected])* @Date 28 April 2017* /@component@aspek@order (2) Public Class JsonReTaspece { /** set pagoning@order* File konfigurasi sistem secara default** @param pjp titik tangen*/ @around (value = "@annotation (org.springframework.web.bind.annotation.ResponseBody)") @order (1) public warp (proceDingJooinpoint pjp) lemparan lemparan {list = pjp. if (isReTurnVoid (pjp)) {httpservletResponse response = ((servletRequestAttributes) requestContextholder.getRequestAttributes ()) .getResponse (); if (isNeedWrap (pjp)) {response.getWriter (). write (jsonutil.toJson (sukses ("Operasi berhasil"))); } daftar pengembalian; } mengembalikan data (daftar); } / ** * adalah paket yang diperlukan * * @param pjp titik tangen * * @return true berarti bahwa tidak perlu * / private boolean isNeedWrap (final proceedingjointpoint pjp) {metode metode = aspectutil.getmethod (pjp); return! Method.IsannotationPresent (void.class); } / ** * Apakah akan mengembalikan kosong * * @param pjp * @return true: Tipe pengembalian batal, false: Tipe pengembalian tidak batal * / private boolean isReturnvoid (ProsidingjOnPoint pjp) {metode metode = aspectutil.getMethod (pjp); Class <?> ReturnType = Method.getReturnType (); return "void" .Equals (returnType.getName ()); } / *** Mengembalikan objek setelah konstruksi yang berhasil* <p>* Ketika pesan kosong, tidak ada prompt diminta, dan jika tidak kosong, itu diminta*** @param pesan sukses* @return json objek* / peta statis public <string, objek> sukses (pesan string akhir) {peta <string, objek> peta = maputil.map (); peta.put ("kode", statuscode.success.key ()); peta.put ("pesan", pesan); peta.put ("Data", "); peta pengembalian;} / *** Pengembalian objek setelah konstruksi yang berhasil* <p>* Saat pesan kosong, tidak ada prompt, dan tidak ada prompt kosong** @param pesan sukses* @return json objek* / peta statis public. Map.put ("Pesan", Pesan);
Menganalisisnya
@Component Anotasi ini berarti menyerahkan objek ini ke wadah pegas untuk instantiasi.
@Spect berarti ini adalah kelas facet
@Around(value = "@annotation(org.springframework.web.bind.annotation.ResponseBody)")
Ini berarti bahwa semua metode dengan anotasi @ResponseBody adalah titik tengah dari bagian ini, dengan kata lain, mereka akan dicegat.
Melihat:
Parameter ProsidingjoinPoint dalam metode WARP hanya dapat menggunakan subclass JoinPoint Subclass ProceCingJoinPoint, hanya dengan pemberitahuan di sekitarnya.
Setiap jenis titik koneksi dapat memanggil metode proxy dan mendapatkan dan mengubah nilai pengembalian. Kalau tidak, itu adalah menggunakan BoinPoint.
Kasus 1: Asumsikan bahwa fungsi di kelas pengontrol tidak memerlukan nilai pengembalian apapun
Misalnya: Ketika saya memperbarui objek entitas, saya hanya perlu mengembalikan hasil pembaruan dan tidak apa -apa, dan tidak perlu mengisi data.
Format data yang dikembalikan:
{"kode": "200", "data": "", "pesan": "berhasil diproses"}Ide Implementasi:
Dapatkan jenis nilai pengembalian fungsi ini dalam fungsi pemrosesan kelas pemrosesan aspek. Jika batal, ia mengembalikan data dalam format yang ditentukan.
IsReturnvoid di atas () adalah penilaian seperti ini.
Anda hanya perlu mengubah nilai pengembalian fungsi menjadi batal:
@RequestMapping@responseBodypublic void add (Long matchId, model model) {slxSignupViewService.setaddinfo (matchid, model);}Kasus 2: Asumsikan bahwa nilai pengembalian fungsi di kelas pengontrol tidak perlu dibungkus
Misalnya:
Nilai pengembalian beberapa plug-in front-end dan docking pihak ketiga (pembayaran) ditentukan.
Dan unduh file, kami berlebihan.
Ide Implementasi:
Kustomisasi anotasi untuk @void:
/*** Anotasi kosong* <p>* Digunakan untuk mengidentifikasi nilai pengembalian di lapisan pengontrol seperti** @author wangssen ([email protected])* @Date 17 Agustus 2017*/@target ({elementType.method})@retensi(retensiPolicy.runtime)@document {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{wooliceRice.
Tambahkan anotasi ini ke metode lapisan pengontrol
/*** Pembayaran selesai*/@void@responsebody@requestMappingPublic void payfinish () melempar ioException {alipayviewservice.payfinish ();}Tentukan apakah fungsi ini berisi anotasi ini pada kelas pemrosesan bagian ini.
Maka itu tidak akan diproses dan kembali apa adanya.
Metode ISNEEDWRAP () di kelas JSONRETURNASECTEK menangani persyaratan ini.
Meringkaskan
Di atas adalah analisis ide implementasi tampilan JSON dari Spring MVC khusus yang diperkenalkan kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!