SpringMVC tiene soporte de expansión muy amigable para la exportación y parámetros de parámetros, lo que le facilita tener mayores derechos de ejecución para la entrada y salida de datos. ¿Cómo podemos hacer una serie de procesamiento a través de los resultados definidos por SpringMVC?
Ingrese el ginseng
RequestBodyAdVice: procesamiento para todos los parámetros con @RequestBody
Caso de referencia: JSONViewRequestBodyAdvice
Public Class JSONViewRequestBodyAdVice extiende requestBodyAdViCeAdapter { /*** Aquí hay una operación preinterceptora y correspondiente. De hecho, le dice que solo aquellos que satisfacen a True ejecutarán el siguiente método de NeartyBodyRead. Aquí puede definir su propia intercepción y coincidencia relacionada con el negocio * @param MethodParameter * @param TargetType * @param convertterType * @return */ @Override public boolean soports (MethodParameter MethodParameter, tipo TargetType, class <? Extiende httpMessageConverter <? >> ConverterType) {Return (AbstractJackson2httpMessageConverter.class.isassignableFrom (ConverterType) && MethodParameter.getParameterAnnotation (jsonView.class)! = NULL); } // Aquí está la preoperación específica ... el siguiente ejemplo es averiguar si este método de entrada de parámetros tiene modificación @JSONView @Override public HttpinputMessage antes que el cuerpo (httpInputMessage inputMessage, métodeParameter MethodParameter, type TargetType, class <? JSONVIEW anotation = MethodParameter.getParameterAnnotation (jsonView.class); Clase <?> [] Classes = annotation.Value (); if (classes.length! = 1) {lanzar nueva ilegalArgumentException ("@jsonview solo compatible con el asesoramiento del cuerpo de solicitud con exactamente 1 argumento de clase:" + MethodParameter); } return New MappingJacksonInputMessage (inputMessage.getBody (), inputMessage.Getheaders (), classes [0]); }}Exportación ginseng
ResponseBodyAdVice: procesamiento para todos los parámetros con @ResponseBody
Caso de referencia:
@ControllerAdVicePublic Class LogresponseBodyAdVice implementa ResponseBodyAdVice { / ** * * @param returnType * @param convertterType * @return * / @Override public boolean soports (MethodParameter ReturnType, clase ConverterType) {return True; } @Override Public Object BeforeBodyWrite (Cuerpo de objetos, MethodParameter ReturnType, mediatype selectedContentType, clase selectedConverterType, serverhttprequest solicitud, respuesta serverhttpresponse) {// haz que cualquier cuerpo sea el objeto de resultado devuelto, el cuerpo de retorno antes del procesamiento; }}Cosas a tener en cuenta
¡La clase de objeto de procesamiento personalizado debe agregarse con la anotación @ControllerAdvice!
¿Por qué?
En el código initControllerAdviceCache() , la clase de RequestMappingHandlerAdapter ejecutará un
Lista <ControllerAdVicebean> Beans = ControllerAdVicebean.FindannotatedBeans (getApplicationContext ()); AnnotationAwareRoRordComparator.sort (frijoles);
El método ControllerAdVicebean.FindannotatedBeans buscará clases con anotaciones ControllerAdVice en la clase y se agregará al procesamiento.
Lista estática pública <ControllerAdViceBean> FindannotatedBeans (ApplicationContext ApplicationContext) {List <ControllerAdVicebean> Beans = new ArrayList <ControllerAdViceBean> (); for (nombre de cadena: beanFactoryUtilss.BeanNamesFortypeInCludedEnCeStors (ApplicationContext, Object.Class)) {if (ApplicationContext.FindAnnotationOnBean (name, controlerAdvice.class)! = NULL) {beans.Add (newerAdvicebean (name, applicationContext)); }} return beans; }Por lo tanto, puede definir los parámetros entrantes y salientes del resultado de acuerdo con sus necesidades y hacer algún tratamiento especial ...
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.