openapi-generator icon indicating copy to clipboard operation
openapi-generator copied to clipboard

[REQ] Lombok support for models

Open com2ghz opened this issue 4 years ago • 13 comments

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

com2ghz avatar Feb 26 '20 10:02 com2ghz

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

bartveenstra avatar Mar 01 '20 19:03 bartveenstra

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

com2ghz avatar Mar 01 '20 21:03 com2ghz

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.

pburls avatar May 15 '20 14:05 pburls

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.

com2ghz avatar May 15 '20 16:05 com2ghz

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.

pburls avatar May 16 '20 13:05 pburls

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.

michaelpro1 avatar May 19 '20 07:05 michaelpro1

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.

com2ghz avatar May 19 '20 16:05 com2ghz

@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.

michaelpro1 avatar Jun 01 '20 07:06 michaelpro1

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

borsch avatar Aug 05 '20 13:08 borsch

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.

pavelvrublevskij avatar Jan 26 '21 15:01 pavelvrublevskij

Hello, is this feature request still under the radar?

aldex32 avatar Jun 25 '21 07:06 aldex32

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

com2ghz avatar Jun 25 '21 08:06 com2ghz

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

yildizib avatar Aug 07 '22 11:08 yildizib

@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.

dabdirb avatar Oct 07 '23 01:10 dabdirb

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.

agr-priyanshu avatar Jan 15 '24 20:01 agr-priyanshu

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

dabdirb avatar Jan 16 '24 01:01 dabdirb

@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

pavelvrublevskij avatar Jan 17 '24 09:01 pavelvrublevskij