Reputation: 456
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
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