diff --git a/core/src/main/java/feign/RequestLine.java b/core/src/main/java/feign/RequestLine.java index b9e8ceffd0..626c618757 100644 --- a/core/src/main/java/feign/RequestLine.java +++ b/core/src/main/java/feign/RequestLine.java @@ -30,9 +30,65 @@ @Retention(RUNTIME) public @interface RequestLine { + /** + * The HTTP request line, including the method and an optional URI template. + * + *

The string must begin with a valid {@linkplain feign.Request.HttpMethod HTTP method name} + * (e.g. {@linkplain feign.Request.HttpMethod#GET GET}, {@linkplain feign.Request.HttpMethod#POST + * POST}, {@linkplain feign.Request.HttpMethod#PUT PUT}), followed by a space and a URI template. + * If only the HTTP method is specified (e.g. {@code "DELETE"}), the request will use the base URL + * defined for the client. + * + *

Example: + * + *

{@code @RequestLine("GET /repos/{owner}/{repo}")
+   * Repo getRepo(@Param("owner") String owner, @Param("repo") String repo);
+   * }
+ * + * @return the HTTP method and optional URI template for the request. + * @see feign.template.UriTemplate + */ String value(); + /** + * Controls whether percent-encoded forward slashes ({@code %2F}) in expanded path variables are + * decoded back to {@code '/'} before sending the request. + * + *

When {@code true} (the default), any {@code %2F} sequences produced during URI template + * expansion will be replaced with literal slashes, meaning that path variables containing slashes + * will be interpreted as multiple path segments. + * + *

When {@code false}, percent-encoded slashes ({@code %2F}) are preserved in the final URL. + * This is useful when a path variable intentionally includes a slash as part of its value (for + * example, an encoded identifier such as {@code "foo%2Fbar"}). + * + *

Example: + * + *

{@code @RequestLine(value = "GET /projects/{id}", decodeSlash = false)
+   * Project getProject(@Param("id") String encodedId);
+   * }
+ * + * @return {@code true} if encoded slashes should be decoded (default behavior); {@code false} to + * preserve {@code %2F} sequences in the URL. + */ boolean decodeSlash() default true; + /** + * Specifies how collections (e.g. {@link java.util.List List} or arrays) are serialized when + * expanded into the URI template. + * + *

Determines whether values are represented as exploded parameters (repeated keys) or as a + * single comma-separated value, depending on the chosen {@link feign.CollectionFormat}. + * + *

Example: + * + *

+ * + * @return the collection serialization format to use when expanding templates. + * @see CollectionFormat + */ CollectionFormat collectionFormat() default CollectionFormat.EXPLODED; }