O SpringMVC possui suporte de expansão muito amigável para parâmetros de exportação e parâmetros, o que facilita você a ter maiores direitos de execução para entrada e saída de dados. Como podemos fazer uma série de processamento através dos resultados definidos pelo SpringMVC?
Entre no ginseng
Requestbodyadvice: processamento para todos os parâmetros com @requestbody
Caso de referência: JSONVIEWRequestbodyAdvice
Classe pública JSONVIEWRequestBodyAdvice Estende o requestbodyAdviceAdApter { /*** Aqui está uma operação pré-intercepta e correspondente. De fato, ele diz que apenas aqueles que satisfazem o verdadeiro executarão o seguinte método antes do corpo de leitura. Aqui você pode definir sua própria interceptação relacionada aos negócios e correspondência * @param MethodParameter * @param TargetType * @param convertertype * @return */ @Override public boolean suporta (MethodParameter MethodParameter, Type TargetType, classe <? Extends HttpMessetGeConverter <? >> (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); Classe <?> [] Classes = anotation.value (); if (classes.length! = 1) {lança nova ilegalArgumentException ("@jsonView suportado apenas para solicitar aconselhamento corporal com exatamente 1 argumento de classe:" + métodParameter); } Retorne o novo MappingjacksonInputMessage (inputMessage.getbody (), inputMessage.getheaders (), classes [0]); }}Exportar ginseng
ResponseBodyAdvice: Processamento para todos os parâmetros com @ResponseBody
Caso de referência:
@ControlleRAdvicePublic Classe LogronsoSoBodyAdvice implementa a resposta coroadvice { / ** * * @param returnType * @param convertertype * @return * / @Override public boolean suporta (MethodParameter ReturnType, classe ConverterType) {Return True; } @Override Public Object Antes do corpoWrite (órgão de objeto, MethodParameter ReturnType, MediaTyPE SelectedContentType, classe SelectedConverterType, ServerHttPrequest Solicitação, servidorhttpResponse resposta) {// faz qualquer coisa é o objeto de resultado retornado, o corpo de retorno antes do processamento; }}Coisas a serem observadas
A classe de objeto de processamento personalizada deve ser adicionada à anotação @Controlleradvice!
Por que?
No código initControllerAdviceCache() , a classe RequestMappingHandlerAdapter executará um
List <CrollerAdviceBean> Beans = controleradviceBean.findannotatedbeans (getApplicationContext ()); anoTationAWareOrdercomparator.sort (Beans);
O método controlleradvicebean.findannotatedbeans procurará classes com anotações do controleradvice na classe e será adicionado ao processamento.
Lista estática pública <CrollerAdViceBean> findannotatedbeans (ApplicationContext ApplicationContext) {List <RollerAdviceBean> Beans = new ArrayList <RollerAdViceBean> (); Para (Nome da String: BeanFactoryUtils.BeanNamesfortypeIncludedAncestors (ApplicationContext, Object.Class)) {if (ApplicationContext.findannotationOnBean (nome, controleradvice.class)! }} retornar feijões; }Assim, você pode definir os resultados de entrada e saída do resultado de acordo com suas necessidades e fazer algum tratamento especial ...
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.