Request Customization
About
HTTP Methods
Supported HTTP Methods
Method
Feign Annotation
Typical Use Case
Supports Body
Example Signature
Example: Using All Methods in One Interface
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/users/{id}")
UserDto getUser(@PathVariable("id") String id);
@PostMapping("/users")
UserDto createUser(@RequestBody CreateUserRequest request);
@PutMapping("/users/{id}")
UserDto updateUser(@PathVariable("id") String id, @RequestBody UpdateUserRequest request);
@PatchMapping("/users/{id}")
UserDto patchUser(@PathVariable("id") String id, @RequestBody PatchUserRequest patch);
@DeleteMapping("/users/{id}")
void deleteUser(@PathVariable("id") String id);
@RequestMapping(value = "/users/{id}", method = RequestMethod.HEAD)
ResponseEntity<Void> checkUserExists(@PathVariable("id") String id);
@RequestMapping(value = "/users", method = RequestMethod.OPTIONS)
ResponseEntity<?> getUserOptions();
}Setting Multiple Query Parameters
Ways to Set Multiple Query Parameters
1. Using @RequestParam for Each Parameter
@RequestParam for Each Parameter2. Using a Map for Dynamic Query Parameters
3. Combining Fixed and Dynamic Parameters
Setting Multiple Path Variables
Defining Multiple Path Variables
1. Using Named Placeholders with @PathVariable
@PathVariable2. Omitting Parameter Names (if method parameter names are preserved)
3. Combining Path and Query Parameters
Setting Request Body
Example: POST Request with JSON Body
Setting Headers
1. Static Headers with @Headers
@Headers2. Dynamic Headers with @RequestHeader
@RequestHeader3. Custom Header Injection via Request Interceptor
4. Multiple Headers Example
Adding Cookies
1. Pass Cookie via @RequestHeader("Cookie")
@RequestHeader("Cookie")2. Use a RequestInterceptor to Set Cookie Globally
RequestInterceptor to Set Cookie GloballyCustom Interceptor Example
3. Supporting Multiple Cookies
4. When we Might Need This ?
Use Case
Example
Change content type / accept type
1. Content-Type
Content-TypeSet Content-Type with @RequestMapping
Content-Type with @RequestMapping2. Accept
AcceptSet Accept with produces Attribute
Accept with produces Attribute3. Set Dynamically via @RequestHeader
@RequestHeader4. Set Globally via RequestInterceptor
RequestInterceptorLast updated