Package feign

Annotation Type HeaderMap


  • @Retention(RUNTIME)
    @Target(PARAMETER)
    public @interface HeaderMap
    A template parameter that can be applied to a Map that contains header entries, where the keys are Strings that are the header field names and the values are the header field values. The headers specified by the map will be applied to the request after all other processing, and will take precedence over any previously specified header parameters.
    This parameter is useful in cases where different header fields and values need to be set on an API method on a per-request basis in a thread-safe manner and independently of Feign client construction. A concrete example of a case like this are custom metadata header fields (e.g. as "x-amz-meta-*" or "x-goog-meta-*") where the header field names are dynamic and the range of keys cannot be determined a priori. The Headers annotation does not allow this because the header fields that it defines are static (it is not possible to add or remove fields on a per-request basis), and doing this using a custom Target or RequestInterceptor can be cumbersome (it requires more code for per-method customization, it is difficult to implement in a thread-safe manner and it requires customization when the Feign client for the API is built).
     ...
     @RequestLine("GET /servers/{serverId}")
     void get(@Param("serverId") String serverId, @HeaderMap Map);
     ...
     
    The annotated parameter must be an instance of Map, and the keys must be Strings. The header field value of a key will be the value of its toString method, except in the following cases:

    • if the value is null, the value will remain null (rather than converting to the String "null")
    • if the value is an Iterable, it is converted to a List of String objects where each value in the list is either null if the original value was null or the value's toString representation otherwise.

    Once this conversion is applied, the query keys and resulting String values follow the same contract as if they were set using RequestTemplate.header(String, String...).