SpringMVC มีการสนับสนุนการขยายตัวที่เป็นมิตรมากสำหรับการส่งออกพารามิเตอร์และพารามิเตอร์ซึ่งช่วยให้คุณมีสิทธิ์ในการดำเนินการมากขึ้นสำหรับการป้อนข้อมูลและเอาต์พุต เราจะทำการประมวลผลชุดผ่านผลลัพธ์ที่กำหนดโดย SpringMVC ได้อย่างไร
เข้าสู่โสม
RequestBodyAdvice: การประมวลผลสำหรับพารามิเตอร์ทั้งหมดด้วย @RequestBody
กรณีอ้างอิง: JsonViewRequestbodyAdvice
คลาสสาธารณะ JsonViewRequestbodyAdvice ขยายการร้องขอ AdviceAdapter { /*** นี่คือการดำเนินการล่วงหน้าและการจับคู่ ในความเป็นจริงมันจะบอกคุณว่ามีเพียงผู้ที่ตอบสนองความจริงเท่านั้นที่จะดำเนินการวิธีการ priorbodyread ต่อไปนี้ ที่นี่คุณสามารถกำหนดการสกัดกั้นที่เกี่ยวข้องกับธุรกิจของคุณเองและการจับคู่ * @param MethodParameter * @param TargetType * @param converterType * @return */ @Override บูลีนสาธารณะรองรับ (MethodParameter MethodParameter, TyctType, คลาส <? (AbstractJackson2httpmessageConverter.class.isassignable from (converterType) && methodparameter.getParameterannotation (jsonView.class)! = null); } // นี่คือการดำเนินการก่อนการดำเนินการเฉพาะ ... ตัวอย่างต่อไปนี้คือการค้นหาว่าวิธีการป้อนพารามิเตอร์นี้มีการปรับเปลี่ยน @JSONView @Override สาธารณะ httpinputMessage priorbodyread (httpinputMessage inputMessage วิธีการ methodparameter jsonView คำอธิบายประกอบ = MethodParameter.getParameterannotation (jsonView.class); คลาส <?> [] คลาส = คำอธิบายประกอบค่า Value (); if (classes.length! = 1) {โยน unlegalargumentException ใหม่ ("@jsonview สนับสนุนเฉพาะสำหรับคำแนะนำการร้องขอร่างกายด้วยอาร์กิวเมนต์คลาส 1 รายการ:" + MethodParameter); } ส่งคืน mappingjacksonInputMessage ใหม่ (inputMessage.getBody (), inputMessage.getheaders (), คลาส [0]); -โสมส่งออก
ResponseBodyAdvice: การประมวลผลสำหรับพารามิเตอร์ทั้งหมดด้วย @ResponseBody
กรณีอ้างอิง:
@ControllerAdvicePublic คลาส LogresponseBodyAdvice ใช้ ResponceBodyAdvice { / ** * * @param returnType * @param converterType * @return * / @Override บูลีนสาธารณะรองรับ } @Override วัตถุสาธารณะก่อน BreadBodyWrite (วัตถุวัตถุ, methodParameter returnType, mediaType selectedContentType คลาสที่เลือกคลาส ConverterType, ServerhttpRequest Request, Serverhttpresponse การตอบสนอง) {// ทำสิ่งใดก็ตาม -สิ่งที่ควรทราบ
คลาสการประมวลผลที่กำหนดเองจะต้องเพิ่มด้วย @ControllerAdvice Annotation!
ทำไม
ใน initControllerAdviceCache() RequestMappingHandlerAdapter
รายการ <ontrollerAdviceBean> Beans = ControllerAdviceBean.findannotatedBeans (getApplicationContext ()); AnnotationAwareOrderComparator.sort (ถั่ว);
เมธอด ControllerAdviceBean.FindannotatedBeans จะมองหาคลาสที่มีคำอธิบายประกอบของตัวควบคุมในชั้นเรียนและจะถูกเพิ่มเข้าไปในการประมวลผล
รายการคงที่สาธารณะ <OntrollerAdviceBean> findAnnotatedBeans (ApplicationContext ApplicationContext) {รายการ <ControllerAdviceBean> Beans = new ArrayList <ControllerAdviceBean> (); สำหรับ (ชื่อสตริง: beanfactoryutils.beannamesfortypeincludedancestors (applicationcontext, object.class)) {ถ้า (applicationcontext.findannotationonbean (ชื่อ, controlleradvice.class)! = null) {beans.add (ใหม่ }} return beans; -ดังนั้นคุณสามารถกำหนดผลลัพธ์ที่เข้ามาและขาออกของผลลัพธ์ตามความต้องการของคุณและทำการรักษาพิเศษ ...
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น