You can club all the supporting classes in one class like below :
@Data
public class Start {
@JsonProperty("dateTime")
public Date dateTime;
public static class Venue {
@JsonProperty("name")
public String name;
}
@Data
public static class Classification {
@JsonProperty("name")
public String name;
}
@Data
public static class Embedded2 {
@JsonProperty("venues")
public List<Venue> venues;
}
@Data
public static class Dates {
@JsonProperty("start")
public Start start;
@JsonProperty("classifications")
public List<Classification> classifications;
@JsonProperty("_embedded")
public Embedded2 _embedded;
}
@Data
public static class Event {
@JsonProperty("name")
public String name;
@JsonProperty("dates")
public Dates dates;
}
@Data
public static class Embedded {
@JsonProperty("events")
public List<Event> events;
}
@Data
public static class Root {
@JsonProperty("_embedded")
public Embedded _embedded;
}
}
You can test (I am using Jackson for deserialization)
create ObjectMapper class and deserialize into a Root class
public class TestJson {
public static void main(String[] args) {
ObjectMapper objectMapper = new ObjectMapper();
try {
Start.Root root = objectMapper.readValue(new File("C:\\Anurag\\Development\\CodeBase\\demo\\src\\main\\java\\com\\example\\demo\\domain\\testJson\\test.json"), Start.Root.class);
System.out.println(root);
} catch (Exception e) {
e.printStackTrace();
}
}
}
-When debugging, you'll notice that our objects have been filled accordingly:

**Changes done as per your requiement **
@Data
public class EventList {
@Getter
@JsonProperty("_embedded")
private Events events;
@Data
public static class Venue {
@JsonProperty("name")
public String name;
}
@Data
public static class Classification {
@JsonProperty("name")
public String name;
}
@Data
public static class Embedded2 {
@JsonProperty("venues")
public List<Venue> venues;
}
@Data
public static class Dates {
@JsonProperty("start")
public Start start;
@JsonProperty("classifications")
public List<Classification> classifications;
@JsonProperty("_embedded")
public Embedded2 _embedded;
}
@Data
public static class EventDetails {
@JsonProperty("name")
public String name;
@JsonProperty("dates")
public Dates dates;
}
@Data
public static class Events {
@JsonProperty("events")
public List<EventDetails> eventsList;
}
@Data
public static class Start {
@JsonProperty("dateTime")
public Date dateTime;
}
}
public class TestJson {
public static void main(String[] args) {
List<EventList.EventDetails> anyCity = findEventByCity("any city");
anyCity.stream().forEach(p-> {
System.out.println(p);
});
}
@SneakyThrows
static List<EventList.EventDetails> findEventByCity(String city) {
ObjectMapper objectMapper = new ObjectMapper();
EventList eventList = objectMapper.readValue(new File("C:\\Anurag\\Development\\CodeBase\\demo\\src\\main\\java\\com\\example\\demo\\domain\\testJson\\test.json"), EventList.class);
List<EventList.EventDetails> eventsList = eventList.getEvents().getEventsList();
return eventsList;
}
}
