Swager CodGen, генерирующий код ApiController.java с множественной попыткой перехвата - PullRequest
0 голосов
/ 23 октября 2019

Я ищу для генерации кода с множественной попыткой перехвата в APIController.java, который генерируется SwagerCodeGen.

файл swagger.yaml

   paths:
  /system:
    post:
      tags:
        - New
      summary: System info
      description: Initial System Info
      operationId: createSystem
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: systemDetails
          description: Contains the JSON Object
          required: true
          schema:
            $ref: '#/definitions/SystemDetails'
        - name: AuthKey
          in: query
          description: Key for Authentication and Authorization.
          required: true
          type: string
          format: uuid
      responses:
        '201':
          description: System Created Successfully
          schema:
            $ref: '#/definitions/Response'
        '400':
          description: Request Failed
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error

Сгенерирован Swagerкод как показано ниже,

SystemApi.java

@ApiOperation(value = "System", notes = "Initial System Info", response = Response.class, tags={ "System", })
@ApiResponses(value = { 
    @ApiResponse(code = 201, message = "System Created Successfully", response = Response.class),
    @ApiResponse(code = 400, message = "Request Failed", response = Void.class),
    @ApiResponse(code = 401, message = "Unauthorized", response = Void.class),
    @ApiResponse(code = 404, message = "Not Found", response = Void.class),
    @ApiResponse(code = 500, message = "Internal Server Error", response = Void.class) })

@RequestMapping(value = "/system",
    produces = { "application/json" }, 
    consumes = { "application/json" },
    method = RequestMethod.POST)
ResponseEntity<Response> createSystem(@ApiParam(value = "Contains the JSON Object" ,required=true )  @Valid @RequestBody SystemDetails systemDetails, @NotNull@ApiParam(value = "Key for Authentication and Authorization.", required = true) @RequestParam(value = "AuthKey", required = true) UUID authKey);

SystemApiController.Java

  public ResponseEntity<Response> createSystem(
      @ApiParam(value = "Contains the JSON Object",
          required = true) @Valid @RequestBody SystemDetails systemDetails,
      @NotNull @ApiParam(
          value = "Key for Authentication and Authorization.",
          required = true) @RequestParam(value = "AuthKey", required = true) UUID authKey) {
    // do some magic!
    return delegate.createSystem(systemDetails, authKey);
  }

Есть ли способЧтобы добавить попробовать поймать автоматически сгенерированный из Swagger CodeGen, как показано ниже?

  public ResponseEntity<Response> createSystem(
      @ApiParam(value = "Contains the JSON Object",
          required = true) @Valid @RequestBody SystemDetails systemDetails,
      @NotNull @ApiParam(
          value = "Key for Authentication and Authorization.",
          required = true) @RequestParam(value = "AuthKey", required = true) UUID authKey) {
    // do some magic!
    try{
        return delegate.createSystem(systemDetails, authKey);
    }catch(InvalidInputException e){
        return new ResponseEntity(new Response(HTTPSTATUS.BAD_REQUEST));
    }
  }

Или, пожалуйста, предложите альтернативный способ. Теперь я обрабатываю все исключения в SystemService.java, не выкидывая никаких исключений в контроллер. Из-за этого мне нужно откатить все транзакции вручную в сервисной части.

1 Ответ

0 голосов
/ 23 октября 2019

Swagger Codegen использует шаблоны усов для генерации вашего кода. Вы можете обратиться к https://github.com/swagger-api/swagger-codegen#modifying-the-client-library-format, чтобы настроить синтаксис сгенерированных классов

...