Java 在何处放置swagger生成的服务器代码的代码

Java 在何处放置swagger生成的服务器代码的代码,java,swagger,code-generation,swagger-codegen,Java,Swagger,Code Generation,Swagger Codegen,我只是从swagger开始生成JavaSpringAPI。 这一代人本身没有问题。我使用PetStore yaml毫无问题地生成SpringBoot服务器端代码 但是,在生成代码之后,我找不到一个好的教程/方法来向我解释在哪里最好地放置我想要编写的自定义代码。直接将其写入生成的代码似乎不是一个好主意,因为如果因为定义中的更改而重新生成,您不希望覆盖所使用的代码 你会得到这样的存根: @Controller public class PetApiController implements PetA

我只是从swagger开始生成JavaSpringAPI。 这一代人本身没有问题。我使用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);
  }
...
}
@控制器
公共类PetApiController实现PetApi{
...
public ResponseEntity上传文件(@ApiParam(value=“要更新的宠物ID”,required=true)@PathVariable(“petId”)Long petId,
@ApiParam(value=“要传递到服务器的其他数据”)@RequestPart(value=“additionalMetadata”,required=false)字符串additionalMetadata,
@ApiParam(value=“file detail”)@RequestPart(“文件”)多部分文件{
//施点魔法吧!
返回新的响应状态(HttpStatus.OK);
}
...
}
现在有没有一种方法可以在生成过程中/生成后用调用服务来填充“Dosomemagic!”部分,这样我就可以使用它作为某种切入点。e、 g.自动连接具有相同方法但可以由我提供的服务,以便我可以将我的实现与生成的代码分开

@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);
  }
...
}
@控制器
公共类PetApiController实现PetApi{
...
@自动连线
PetApiService PetApiService;
...
public ResponseEntity上传文件(@ApiParam(value=“要更新的宠物ID”,required=true)@PathVariable(“petId”)Long petId,
@ApiParam(value=“要传递到服务器的其他数据”)@RequestPart(value=“additionalMetadata”,required=false)字符串additionalMetadata,
@ApiParam(value=“file detail”)@RequestPart(“文件”)多部分文件{
返回petApiService.uploadFile(文件);
}
...
}

谢谢

使用Swagger重新生成新代码并阻止它覆盖您想要生成的任何代码是不容易的。虽然如果您想更改api,有一种方法可以减轻所有的复制粘贴。不要在“dosomemagic”注释中编写所有代码,而是尝试在外部类中加入一个方法,因此,如果您需要使用swagger重新生成代码,您只需要复制一行代码,我将给您一个示例:

@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);
  }
...
}
@控制器
公共类PetApiController实现PetApi{
@自动连线
GenerateResponse GenerateResponse;
...
public ResponseEntity上传文件(@ApiParam(value=“要更新的宠物ID”,required=true)@PathVariable(“petId”)Long petId,
@ApiParam(value=“要传递到服务器的其他数据”)@RequestPart(value=“additionalMetadata”,required=false)字符串additionalMetadata,
@ApiParam(value=“file detail”)@RequestPart(“文件”)多部分文件{
返回generateResponse.uploadFile(petId,additionalMetadata,file);
}
...
}
在你们的课外课上,我称之为“生成响应”:

@组件
公共类生成器响应{
@自动连线
PetApiService PetApiService;
public ResponseEntity上载文件(长petId、字符串附加元数据、多部分文件){
返回petApiService.uploadFile(文件);
}
}

因此,您只需复制“return generatereresponse.uploadFile(petId,additionalMetadata,file);”行,每次更改时只创建一次自动连接的generatereresponse。

谢谢,这是我建议的尽可能减少它的答案,我只是希望会有一些自动连接服务。似乎没有
@Component
public class GenerateResponse{
@Autowired
PetApiService petApiService;

    public ResponseEntity<ModelApiResponse> uploadFile(Long petId, String additionalMetadata, MultipartFile file){
    return petApiService.uploadFile(file);
    }
}