If you have more header options, then each API will have as many @RequestHeader
To avoid this, and your API looks simple, you can use the HeaderInterceptor to collect header information.
In preHandle() , you need to extract the headerInfo in to a an Object and set it as RequestAttribute public class MyHeaderInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { HeaderVo headerVo = HeaderVo.createReqHeaderinput( request.getHeader("authorization"), request.getHeader("contentType"), request.getHeader("myHeaderParam0"), request.getHeader("myHeaderParam1"), request.getHeader("myHeaderParam3"), request.getHeader("myHeaderParam4"), request.getHeader("myHeaderParam5") ); // You can do any validation of any headerInfo here. validateHeader(headerVo); request.setAttribute("headerName", headerVo); return true; } }
Your API will look like this with @RequestAttribute ("headerName")
public @ResponseBody ResponseEntity<MyResponse> getSomeApi( //Headers common for all the API @RequestAttribute("headerName") HeaderVo header , @ApiParam(value = "otherAPiParam", required = true, defaultValue = "") @PathVariable(value = "otherAPiParam") String otherAPiParam, @ApiParam(value = "otherAPiParam1", required = true, defaultValue = "") @RequestParam(value = "otherAPiParam1") String otherAPiParam1, @ApiParam(value = "otherAPiParam2, required = true, defaultValue = "") @RequestParam(value = "otherAPiParam2") String otherAPiParam2 ) throws MyExcp { .... }
Your Swagger should still describe all the API headers, for this you can add parameters to the swagger Docket, SwaggerConfig. Note that ignoredParameterTypes, as we mentioned, ignores HeaderVo, as it is internal to the application. swagger does not require to show that
@Bean public Docket postsApi() { //Adding Header ParameterBuilder aParameterBuilder = new ParameterBuilder(); List<Parameter> aParameters = new ArrayList<Parameter>(); aParameters.clear(); aParameterBuilder.name("myHeaderParam0").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); aParameters.add(aParameterBuilder.build()); aParameterBuilder.name("myHeaderParam1").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); aParameters.add(aParameterBuilder.build()); .... .... return new Docket(DocumentationType.SWAGGER_2).groupName("public-api") .apiInfo(apiInfo()).select().paths(postPaths()).build().ignoredParameterTypes(HeaderVo.class).globalOperationParameters(aParameters); }