In Retrofit 2, when we need to add additional headers, we would just add an implementation of the Interceptor.

But sometimes, we only need to add a particular header for one API call, and the value is set dynamically at runtime. It's a bit tedious to add another interceptor just for that call.

The @Header annotation is really handy for this case. So we can pass a parameter annotated with @Header to the API call method. And Retrofit will take care of it.

Let's take look at an example:

@GET("/weather")
Observable<WeatherInfo> getWeather(@Header("foo") String value, Location location);

That would allow us to pass a String value as a request header for the getWeather API call. If the value is null, the foo header will just be omitted from the request.