You can also use the OpenAPI generator to turn a well-formed Swagger document into code. I've used it before. I didn't hate it.
The generated controllers have a lot of boilerplate (I want to say 5 classes per controller), but it does guarantee the code is in sync with the documentation.
That being said, fuck manually maintaining swagger documents. It's the worst of all possible works.