2017-12-06 3 views
0

Ich benutze Spring Boot. Ich möchte ein Feld in den Header jeder Antwort hinzufügen. Also, ich benutze Abfangjäger. Der Code ist:Fügen Sie mehr Feld in den Header mit Interceptor von Spring Boot nicht arbeiten

@Component 
public class ApiVersionInterceptor extends HandlerInterceptorAdapter{ 
    private final Logger log = LoggerFactory.getLogger(ApiVersionInterceptor.class); 

    @Autowired 
    private Environment environment; 

    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
           Object handler, Exception arg3) throws Exception { 
     String apiVersion = environment.getProperty(ApiVersion.VERSION_KEY.getKey()); 
     log.debug("api-version:"+apiVersion); 
     response.addHeader("Api-Version", apiVersion); 
    } 
} 

und die Konfiguration ist:

@Configuration 
public class InterceptorsConfiguration extends WebMvcConfigurerAdapter { 

    @Autowired 
    private ApiVersionInterceptor apiVersionInterceptor; 

    /** 
    * Add interceptor 
    */ 
    @Override 
    public void addInterceptors(final InterceptorRegistry registry) { 

     //Add api-version field to header of response 
     registry.addInterceptor(apiVersionInterceptor); 
    } 

} 

Um sicherzustellen, dass dieser Code snipped ausgeführt wird, weil:

2017-12-06 02:35:10,392 DEBUG [] [http-nio-8080-exec-7] ApiVersionInterceptor: api-version:1.9.0 

Aber ich verstehe nicht, ich don Dieses Feld wird nicht in der Kopfzeile einer Antwort angezeigt.

aktualisieren

Meine app Verwendung Restful webservice, also keine Aussicht Phase haben.

Danke für Hilfe.

Antwort

1

Sie sollten Header in einer früheren Phase hinzufügen, überschreiben Sie die preHandle Methode in Ihrem ApiVersionInterceptor. Denn in afterCompletion Antwort ist bereits festgeschrieben und Kopfzeilenänderungen überspringen.

+0

Wenn ich 'prehandle()' oder 'postHandle()' verwende. Nichts passiert. –

+0

Ich habe eine kleine Demo als Sie erstellt, und überprüft von RestClient gibt es einen Link [ScreenShot] (http://prntscr.com/hjq9lj) auf den Screenshot. Es ist seltsam, warum es für dich nicht funktioniert hat. Bei Bedarf kann ich diese Demo auf den Git schicken, nur kommentieren. – borino

+0

Vielen Dank für Ihre Hilfe. Ich werde ein kleines Projekt erstellen und erneut überprüfen. Und ich kann mein Projekt nicht vorantreiben, weil es ein Projekt meiner Firma ist. –

Verwandte Themen