Add a header parameter in Swagger UI documentation with Springfox
I prefer to use @ApiImplicitParam
after my @RequestMapping
rather than as function parameters because generally you might process your headers in a filter (eg authentication) and you are not needing the values in that method.
Besides if you need them in the method Swagger auto provides the field for a @HeaderParam
This style also Improves readability and flexibility when some calls need headers and other don't.
Example
@PostMapping
@ApiImplicitParam(name = "Authorization", value = "Access Token", required = true, allowEmptyValue = false, paramType = "header", dataTypeClass = String::class, example = "Bearer access_token")
fun addJob(jobRequest: Job): ResponseEntity<*>{}
If all or most for your endpoints need header that I'll rather configure it as seen here
If you have to declare several header params, you need to use the @ApiImplicitParams
annotation:
@PostMapping
@ApiImplicitParams({
@ApiImplicitParam(name = "Authorization", value = "Access Token", required = true, allowEmptyValue = false, paramType = "header", dataTypeClass = String.class, example = "Bearer access_token"),
@ApiImplicitParam(name = "X-Custom-Header", value = "A Custom Header", required = true, allowEmptyValue = false, paramType = "header", dataTypeClass = String.class, example = "my header example")
})
fun addJob(jobRequest: Job): ResponseEntity<*>{}
I just added @RequestHeader(value="myHeader") String headerStr
:
public ResponseEntity<User> saveNewUser(
@RequestHeader(value="myHeader") String headerStr,
@ApiParam(value = "the user to create", required = true) @RequestBody User user) throws RestServiceException {
userService.save(user);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
(import org.springframework.web.bind.annotation.RequestHeader;
)
You can also add a global header on every service in your documentation with the solution described here : Spring + Springfox + Header Parameters