OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.35k stars 6.46k forks source link

[REQ] Lombok support for models #5447

Open com2ghz opened 4 years ago

com2ghz commented 4 years ago

I created a pull request with support for lombok models that come with certain convenient annotations for immutable models with builders. Currently I implemented this only for spring-mvc.

The problem is that I can't add any reviewer to the pull request.

https://github.com/OpenAPITools/openapi-generator/pull/5430

bartveenstra commented 4 years ago

Lombok does take away all those bugs for hashCode, toString and equals away, by just adding @Data to all pojo's. Greatly simplyfies the generation of models

com2ghz commented 4 years ago

Agree with @bartveenstra. I can build lombok support in the java templates. Which would simplify the models. The models are overcomplicated in my opinion.

pburls commented 4 years ago

I would also love to see Lombok support for models.

Although it doesn't make much sense generating code that then generates more code at build time, it will really help unlock features that lombok already provides and won't need to be recreated in this project. Like builders.

I work with plenty of teams that hand craft their models using Lombok and being able to generate familiar looking code would help convince them to move over to generated models. And ease their transition without having to re-write all their tests that already use lombok builders.

If there is any help you need with getting this across the line please let me know.

com2ghz commented 4 years ago

I managed to use lombok modes by modifying the mustache files and use it already in production.

I think I will create a new generator for this.

pburls commented 4 years ago

Looking through some of the other issues, in #324 I see people claim to have managed to use the Lombok builder functionality using the new additionalModelTypeAnnotations config option for Java based generators. I think this maybe a good enough solution for me.

michaelpro1 commented 4 years ago

Would those annotations still require the POJO getters, setters and toStrings to still be manually removed? Since lombok is expected to generate all those.

In the meantime I forked @com2ghz branch and rebased it on top of recent master.

com2ghz commented 4 years ago

Would those annotations still require the POJO getters, setters and toStrings to still be manually removed? Since lombok is expected to generate all those.

In the meantime I forked @com2ghz branch and rebased it on top of recent master.

I would not recommend to use that branch. Its better to create a new clean generator that does the bare minimum in order to use lombok.

I currently have it like that at the client.

michaelpro1 commented 4 years ago

@com2ghz Which branch are you referring to? I thought that Lombok usage is generic enough that it is applicable to all Java pojo generators, client and server.

borsch commented 4 years ago

@com2ghz @michaelpro1 @pburls I have this feature here https://github.com/OpenAPITools/openapi-generator/pull/4026 . It's available since 4.2.3 release

pavelvrublevskij commented 3 years ago

I have tried first time to use OpenAPI generator and without builder pattern many of developers returned to legacy state. Waiting for improvements to use lombok without using templates for generator.

aldex32 commented 3 years ago

Hello, is this feature request still under the radar?

com2ghz commented 3 years ago

Hello,

is this feature request still under the radar?

No need for this. You can create custom mustache templates that have these lombok annotations. We are already using this in production. We are using the following features of Lombok:

On the getters we return Optionals when the field is not required. This solves the problem with nullable lists

yildizib commented 2 years ago

Hello, is this feature request still under the radar?

No need for this. You can create custom mustache templates that have these lombok annotations. We are already using this in production. We are using the following features of Lombok:

  • Builder
  • EqualsAndHashCode
  • ToString
  • Getter
  • NonNull on required fields

On the getters we return Optionals when the field is not required. This solves the problem with nullable lists

Hello,

please add @Data in your list

dabdirb commented 11 months ago

@wing328 @martin-mfg this feature is very useful, the default generated model, introduced so many limitation and issues, especially when we defined complex schema with anyOf oneOf and $ref. in my project, i have to create another class with same fields, decorate with lombok, use mapstruct to convert data from rest api interface.

agr-priyanshu commented 8 months ago

Can someone provide an example on how to achieve this, may be a working template ?

I tried adding lombok annotations in additionalModelTypeAnnotations like this; (additionalModelTypeAnnotations="@lombok.Data;@lombok.EqualsAndHashCode)

Observations;

  1. This does add the annotation in generated classes but no import statements related to lombok are added.
  2. This doesn't remove default getter/setter/hashcode etc which eventually have to be manually removed.
dabdirb commented 8 months ago

@agr-priyanshu This PR was not merged. I will create another PR to implement this.

pavelvrublevskij commented 8 months ago

@agr-priyanshu

Can someone provide an example on how to achieve this, may be a working template ?

I tried adding lombok annotations in additionalModelTypeAnnotations like this; (additionalModelTypeAnnotations="@lombok.Data;@lombok.EqualsAndHashCode)

Observations;

  1. This does add the annotation in generated classes but no import statements related to lombok are added.
  2. This doesn't remove default getter/setter/hashcode etc which eventually have to be manually removed.

Maybe my example will help you