Sharing POJOs between Java backend and an Android application

There are certainly lots of other ways of doing this and better or not; I will leave that to you to consider.

But before going to sharing the POJOs, I ask you to take a step backwards and take a look at your architecture. You have essentially got:

  1. a Java Backend with REST APIs, supporting JSON payload
  2. an Android Application, capable of making REST calls and deserialising the JSON payloads.

If you note, above, the tech stack does not involve POJO on any level. You see what I mean? POJO is an implementation detail for you and it is not wise to share it among your components.

How about looking into the future where you add more components to your architecture, say:

  1. iOS application
  2. Kotlin support for Android application

Will your inclination to share POJO code still be intact? Perhaps not.

From what I see, you should design and develop for a REST backend and a REST capable client. Thats all. That should be the bottomline.

So with that, coming back to your requirements of sharing the updates between the backend and the client, you can share the JSON schema between the two, instead of sharing the POJOs. And thereafter, employ an automated system (say, a simple script) to generate POJOs in the backend and the client.

This approach can have certain benefits. For instance:

  1. You will be able to share updates now and in the future, as per your requirements.
  2. This makes your modularity (or decoupling) better too because the backend and the client is not bound by the requirements to use POJOs. For instance, you can use Data class if you decide to use Kotlin in your client.
  3. You can use versioned schema for future, for the times where the client cannot keep up with the backend, or the backend needs to update independently.
  4. and more