【问题标题】:where to put code for swagger generated server code在哪里放置招摇生成的服务器代码的代码
【发布时间】:2018-06-19 21:06:49
【问题描述】:

我刚开始用 swagger 生成 java Spring API。 一代本身没有问题。我使用 PetStore yaml 生成 SpringBoot 服务端代码没有问题。

在我生成代码之后,我找不到一个好的教程/方法来向我解释最好将我想编写的自定义代码放在哪里。将其直接写入生成的代码似乎不是一个好主意,因为如果我因为定义的更改而重新生成,您不想覆盖所使用的代码。

你会得到这样的存根:

@Controller
public class PetApiController implements PetApi {
...
  public ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update",required=true ) @PathVariable("petId") Long petId,
    @ApiParam(value = "Additional data to pass to server") @RequestPart(value="additionalMetadata", required=false)  String additionalMetadata,
      @ApiParam(value = "file detail") @RequestPart("file") MultipartFile file) {
      // do some magic!
      return new ResponseEntity<ModelApiResponse>(HttpStatus.OK);
  }
...
}

现在有没有办法填补“做一些魔术!”生成期间/之后的一部分,即调用服务,以便我可以将其用作入口点。例如自动装配具有相同方法但可由我提供的服务,以便我可以将我的实现与生成的代码分开。

@Controller
public class PetApiController implements PetApi {
...
@Autowired
PetApiService petApiService;
...
  public ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update",required=true ) @PathVariable("petId") Long petId,
    @ApiParam(value = "Additional data to pass to server") @RequestPart(value="additionalMetadata", required=false)  String additionalMetadata,
      @ApiParam(value = "file detail") @RequestPart("file") MultipartFile file) {
      return petApiService.uploadFile(file);
  }
...
}

谢谢

【问题讨论】:

    标签: java swagger code-generation swagger-codegen


    【解决方案1】:

    没有简单的方法可以使用 Swagger 重新生成新代码并阻止它覆盖您想要创建的任何代码。尽管如果您想更改 api,有一种方法可以减轻所有的复制粘贴。不要将所有代码都写在“做一些魔术”注释上,而是尝试放入外部类中的方法,因此,如果您需要大摇大摆地重新生成代码,您只需要复制一行,我给你举个例子:

    @Controller
    public class PetApiController implements PetApi {
    
    @Autowired
    GenerateResponse generateResponse;
    ...
      public ResponseEntity<ModelApiResponse> uploadFile(@ApiParam(value = "ID of pet to update",required=true ) @PathVariable("petId") Long petId,
        @ApiParam(value = "Additional data to pass to server") @RequestPart(value="additionalMetadata", required=false)  String additionalMetadata,
          @ApiParam(value = "file detail") @RequestPart("file") MultipartFile file) {
          return generateResponse.uploadFile(petId, additionalMetadata, file);
      }
    ...
    }
    

    在我称之为“GenerateResponse”的课外课程中:

    @Component
    public class GenerateResponse{
    @Autowired
    PetApiService petApiService;
    
        public ResponseEntity<ModelApiResponse> uploadFile(Long petId, String additionalMetadata, MultipartFile file){
        return petApiService.uploadFile(file);
        }
    }
    

    所以你只需要复制“return GenerateResponse.uploadFile(petId, additionalMetadata, file);”行,并且每次更改时只创建一次自动装配的 GenerateResponse。

    【讨论】:

    • 谢谢,这也是我建议尽可能减少它的答案,我只是希望有一些自动服务接线可能。好像没有
    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2015-10-31
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多