I was used to manage versions with a tag in Git. But that was a long time ago, for stand-alone applications. Now the problem is that I have a web application, and at the same application might connect clients that expect to communicate to different versions of the application.

So, I added to the input a path variable for the version in that way :

```
@PathParam("version") String version

```

And the client can specify the version in the URL:

```
https://whatever.com/v.2/show

```

Then across the code I added conditions like this:

```
if(version.equals("v.2") {
    // Do something
}
else if(version.equals("v.3") {
    // Do something else
}
else {
    // Or something different
}

```

The problem is that my code is becoming very messy. So I decided to do in a different way. I added this condition only in one point of the code, and from there I call different classes according to the version:

```
MyClassVersion2.java
MyClassVersion3.java
MyClassVersion4.java

```

The problem now is that I have a lot of duplication.

And I want to solve this problem as well. How can I do now to have a web application that:

```
1) Deal with multiple versions
2) It is not messy (with a lot of conditions)
3) Doesn't have much duplication

```