где разместить код для сгенерированного кода сервера swagger

Я только начинаю с чванства, чтобы создать Java Spring API. Само поколение проблем не представляет. Я использовал yaml PetStore, чтобы без проблем сгенерировать серверный код 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);
  }
...
}

Спасибо


person Xtroce    schedule 10.01.2018    source источник


Ответы (1)


Нет простого способа восстановить новый код с помощью Swagger и предотвратить его перезапись любого кода, который вы хотите создать. Хотя есть способ смягчить все копи-вставки, если вы хотите изменить api. Вместо того, чтобы писать весь код в комментарии «сделай какое-нибудь волшебство», попробуйте добавить метод во внешний класс, поэтому в случае, если вам нужно регенерировать код с чванством, вам нужно будет скопировать только одну строку, I Приведу вам пример:

@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);» line и создавайте автоматически подключенный GenerateResponse только один раз при его изменении.

person Daniel Diment    schedule 10.01.2018
comment
спасибо, это было то, что я предлагал в качестве ответа, чтобы уменьшить его как можно больше, я просто надеялся, что будет возможно какое-то автоматическое сервисное подключение. Кажется, нет - person Xtroce; 10.01.2018