[SPRING] Springfox와 함께 Swagger UI 문서에 헤더 매개 변수 추가
SPRINGSpringfox와 함께 Swagger UI 문서에 헤더 매개 변수 추가
나머지 서비스의 자동 생성 된 swagger ui 설명서에 헤더 매개 변수 필드를 추가하고 싶습니다. Spring과 Springfox를 사용합니다.
public ResponseEntity<User> saveNewUser(
@ApiParam(value = "the user to create", required = true) @RequestBody User user) throws RestServiceException {
userService.save(user);
return new ResponseEntity<User>(user, HttpStatus.OK);
}
보시다시피 이미 체형 매개 변수가 있습니다. 헤더 유형 하나를 추가하고 싶습니다.
해결법
-
==============================
1.@RequestHeader (value = "myHeader") String headerStr을 추가했습니다.
@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;)
여기에 설명 된 솔루션을 사용하여 설명서의 모든 서비스에 글로벌 헤더를 추가 할 수도 있습니다. Spring + Springfox + 헤더 매개 변수
-
==============================
2.필자는 일반적으로 필터에서 헤더를 처리 (예 : 인증) 할 수 있으며 해당 메소드의 값이 필요하지 않기 때문에 함수 매개 변수 대신 @RequestMapping 다음에 @ApiImplicitParam을 사용하는 것이 좋습니다.
필자는 일반적으로 필터에서 헤더를 처리 (예 : 인증) 할 수 있으며 해당 메소드의 값이 필요하지 않기 때문에 함수 매개 변수 대신 @RequestMapping 다음에 @ApiImplicitParam을 사용하는 것이 좋습니다.
Swagger auto가 @HeaderParam에 대한 필드를 제공하는 방법에서 필요한 경우 외에
이 스타일은 또한 일부 통화에는 헤더가 필요하고 다른 통화에는 필요하지 않을 때 가독성과 유연성을 향상시킵니다.
예
@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<*>{}
엔드 포인트의 전부 또는 대부분에 헤더가 필요한 경우 여기에 표시된대로 구성합니다.
여러 헤더 매개 변수를 선언해야하는 경우 @ApiImplicitParams 주석을 사용해야합니다.
@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<*>{}
-
==============================
3.더 많은 헤더 매개 변수가있는 경우 모든 API에는 많은 @RequestHeader가 있습니다.
더 많은 헤더 매개 변수가있는 경우 모든 API에는 많은 @RequestHeader가 있습니다.
이를 피하고 API가 단순 해 보이도록 헤더 인터셉터를 사용하여 헤더 정보를 캡처 할 수 있습니다.
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; } }
귀하의 API는 @RequestAttribute ( "headerName")과 함께 다음과 같습니다.
public @ResponseBody ResponseEntity<MyResponse> getSomeApi( //Headers common for all the API's @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 { .... }
Swagger는 여전히 swagger Docket, SwaggerConfig에 매개 변수를 추가 할 수 있도록 API의 모든 헤더를 설명해야합니다. 응용 프로그램 내부이기 때문에 HeaderVo를 무시한다고 언급 한 ignoreParameterTypes에 유의하십시오. swagger는 그것을 보여줄 필요가 없습니다.
@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); }
from https://stackoverflow.com/questions/40801442/add-a-header-parameter-in-swagger-ui-documentation-with-springfox by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] hibernateTemplate.save ()에 대해 쿼리 실행을 선택하십시오. (0) | 2019.09.08 |
---|---|
[SPRING] 스프링 부트 Amazon AWS S3 버킷 파일 다운로드-액세스 거부 (0) | 2019.09.08 |
[SPRING] 스프링 데이터, 중첩 된 객체의 속성으로 찾기 (0) | 2019.08.17 |
[SPRING] 최대 절전 모드를 사용하여 봄 부팅에서 MySQL 저장 프로 시저를 호출하는 방법은 무엇입니까? (0) | 2019.08.17 |
[SPRING] WebMvcConfigurationSupport와 WebMvcConfigurerAdapter의 차이점 (0) | 2019.08.16 |