Lost Heaven 0809
Lost Heaven 0809

Reputation: 456

Add more field into header using interceptor of spring boot not work

I'm using spring boot. I want to add a field into header of every response. So that, i using interceptor. The code is:

@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);
    }
}

And the configuration is:

@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);
    }

}

To make sure this snipped code is run because of:

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

But i don't understand, i don't see this field in the header of any response.

Update

My app use Restful webservice, so don't have view phase.

Thanks for help.

Upvotes: 0

Views: 808

Answers (1)

borino
borino

Reputation: 1750

You should add header in a earlier phase, override the preHandle method in your ApiVersionInterceptor. Because in afterCompletion response is already committed and skip header changes.

Upvotes: 1

Related Questions