SpringMVC memiliki dukungan ekspansi yang sangat ramah untuk parameter ekspor dan parameter, yang memfasilitasi Anda untuk memiliki hak eksekusi yang lebih besar untuk input dan output data. Bagaimana kita bisa melakukan serangkaian pemrosesan melalui hasil yang ditentukan oleh SpringMVC?
Masukkan ginseng
RequestBodyAdvice: Pemrosesan untuk semua parameter dengan @RequestBody
Kasus Referensi: JSONVIEWREQUESTBODYADVICE
Kelas Publik JSONVIEWREQUESTYADVICE Memperluas RequestBodyAdviceAdapter { /*** Berikut ini adalah operasi pra-intersepsi dan pencocokan. Faktanya, ini memberi tahu Anda bahwa hanya mereka yang memuaskan yang akan menjalankan metode berikut sebelum pembentukan. Di sini Anda dapat mendefinisikan intersepsi dan pencocokan yang terkait dengan bisnis Anda sendiri * @param MethodParameter * @param targetType * @param converterType * @return */ @Override PUBLIK DUKUNGAN (METODEPARAMETE METODEPARAMETER, TYPE TARGETTEPE, Kelas <? Extends HTTPMessageConVerter <? Converterer, converterter, convertye <? Extends httpMessageConVerter <? Converter/ converterer, convertype/ class <? Extends httpmessageConVerter <? Converterer, converterer) oVORDING.EVERSICTY/ CONVERTER <? Extends httpMessageConVerter <? (Abstractjackson2httpmessageConverter.class.isassignableFrom (converTerType) && methodParameter.getParameterAnnotation (jsonview.class)! = Null); } // Here is the specific pre-operation... The following example is to find out whether this parameter entry method has @JsonView modification @Override public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> selectedConverterType) throws IOException {JSonView annotation = MethodParameter.getParameterAnnotation (jSonView.class); Kelas <?> [] Class = annotation.value (); if (class.length! = 1) {lempar new IllegalArgumentException ("@jsonview hanya didukung untuk saran badan permintaan dengan tepat 1 argumen kelas:" + methodParameter); } return MappingJackSonInputMessage baru (inputMessage.getBody (), inputMessage.getHeaders (), kelas [0]); }}Ekspor Ginseng
ResponseBodyAdvice: Pemrosesan untuk semua parameter dengan @ResponseBody
Kasus referensi:
@ControllerAdvicePublic Class LOGRESPONSEBOBYADM IMPlements ResponseBodyAdvice { / ** * * @param returnType * @param converterType * @return * / @override public boolean dukungan (methodParameter returnType, class converterType) {return true; } @Override Objek publik Sebelumwrite (Badan Objek, MethodParameter ReturnType, Mediatype SelectedContentType, Kelas SelectedConVerTyType, ServerHtTpRequest Request, ServerHttPresponse Response) {// Lakukan apa pun yang badan adalah objek hasil yang dikembalikan, badan pengembalian sebelum diproses; }}Hal -hal yang perlu diperhatikan
Kelas Objek Pemrosesan Kustom harus ditambahkan dengan anotasi @ControllerAdvice!
Mengapa?
Dalam kode initControllerAdviceCache() , kelas RequestMappingHandlerAdapter akan mengeksekusi a
Daftar <ControllerAdviceBean> beans = controllerAdviceBean.findannotatedBeans (getApplicationContext ()); annotationAwareOrderComparator.sort (beans);
Metode ControllerAdviceBean.FindannotatedBeans akan mencari kelas dengan anotasi ControllerAdvice di kelas dan akan ditambahkan ke pemrosesan.
Daftar Statis Publik <ControlerAdviceBean> FindAnnotatedBeans (ApplicationContext ApplicationContext) {List <ControllerAdviceBean> beans = ArrayList baru <ControlerAdviceBean> (); untuk (nama string: beanfactoryutils.beannamesfortypeIncedEncestors (ApplicationContext, Object.class)) {if (applicationContext.findannotationonBean (name, controllerAdvice.class)! = null) {beans.add (controllerer new, name, name, name, name); }} mengembalikan kacang; }Jadi Anda dapat menentukan hasil yang masuk dan keluar dari hasil sesuai dengan kebutuhan Anda dan melakukan beberapa perawatan khusus ...
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.